시스템

[시스템] 바인드 쉘 ? 알아볼게요 ( with. shell script )

JJANG-JOON 2023. 8. 18. 13:59
반응형

바인드 쉘

 

 

 

 

 

 

 

 

 

바인드 쉘은 해커가 원격 시스템에 접근하여 제어하기 위해 사용하는 기술로, 서버에서 서버 포트가 열리고, 클라이언트(공격자)가 서버로 접속하여 생성하는 쉘 일반적인 서버 접속하는 형태이다.

 

 

 

바인드 쉘 공격 절차

 

  1. 포트 선택: 공격자는 바인드 쉘을 실행할 포트 번호를 선택하는데 이 포트는 공격자가 접근할 때 사용된다.
  2. 바인드 쉘 실행: 선택한 포트에서 리스닝하는 쉘을 실행시킨다. 이때 공격자는 해당 포트로 접근하면 쉘이 실행되어 원격으로 제어 가능한 상태가 된다.
  3. 연결 시도: 공격자는 바인드된 쉘이 실행된 시스템의 IP 주소와 선택한 포트로 연결을 시도한다.
  4. 원격 조작: 연결이 성공하면 공격자는 해당 쉘을 통해 명령어를 전송하여 시스템을 원격으로 조작하고 제어할 수 있다.

 

 

 

 

공격 시나리오

 

공격자가 어떤 기업의 웹 서버에 침투하고자 한다고 가정해보자

  1. 공격자는 해당 기업의 웹 사이트를 분석하여 취약점을 찾는다.
  2. 웹 사이트의 입력 폼에서 취약점을 발견하고, 악성 PHP 스크립트를 삽입한다.
  3. 악성 스크립트가 실행되면, 해당 서버는 바인드 쉘을 실행시켜 특정 포트에서 리스닝하게 된다.
  4. 공격자는 바인드된 쉘에 연결을 시도하고 성공하면, 원격으로 명령어를 실행하여 웹 서버를 조작하거나 중요한 데이터를 탈취할 수 있다.
  5. 공격자는 제어권을 가진 상태에서 서버를 마음대로 원격으로 제어하며, 중대한 피해를 입힐 수 있다.

 

 

 

 

바인드 쉘 예시:

 

 

예를 들어, 공격자가 웹 서버에 악성 코드를 삽입하여 해당 서버를 제어하고자 한다고 가정해자

 

  1. 공격자는 웹 서버의 취약점을 분석하여 공격 대상 시스템의 취약점을 확인한다.
  2. 해당 서버에 악성 PHP 스크립트를 삽입합니다. 이 스크립트는 특정 포트에서 바인드 쉘을 실행시키는 역할을 한다.
  3. 공격자는 바인드 쉘을 실행하기 위해 다음과 같은 명령어를 실행한다.
<?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를 통해 바인드 쉘을 생성한다. 공격자가 웹 서버에 접근하면, 해당 스크립트가 실행되어 바인드 쉘을 리스닝하게 된다.

 

  1. $bind_port: 바인드 쉘을 실행할 포트 번호를 지정. 예제에서는 4444번 포트를 사용하도록 설정되어 있다.
  2. $bind_addr: 바인드된 쉘이 대기할 IP 주소를 지정. "0.0.0.0"은 모든 인터페이스에 대해 대기함을 의미한다. 이는 어떤 IP에서든 연결을 받을 수 있도록 한다.
  3. socket_create: PHP의 소켓 함수를 사용하여 소켓을 생성. AF_INET은 IPv4를 사용하며, SOCK_STREAM은 TCP 소켓을 의미한다. SOL_TCP는 프로토콜 레벨을 나타낸다.
  4. socket_bind: 생성한 소켓을 지정된 IP 주소와 포트에 바인드한다. 이로써 해당 IP와 포트로 들어오는 연결을 수신하게 된다.
  5. socket_listen: 소켓을 대기 상태로 설정하고 최대 대기 큐의 길이를 설정한다. 여기서는 최대 5개의 연결 대기열을 생성한다.
  6. socket_accept: 클라이언트 연결을 대기하고, 클라이언트가 연결되면 해당 클라이언트 소켓을 반환한다.
  7. socket_close: 소켓을 닫습니다. 연결 대기 큐를 비우고 포트를 해제한다.
  8. system("/bin/bash -i <&3 >&3 2>&3"): 이 부분은 바인드된 쉘에서 실행된다. /bin/bash는 바인드된 쉘이 쉘을 실행하라는 의미이며, <&3 >&3 2>&3는 입출력 리디렉션을 설정하는 부분이다. 이를 통해 쉘의 입출력이 소켓 연결로 이어지게 된다.

 

 

이 코드를 사용하는 시나리오는 다음과 같다.

 

  1. 공격자는 웹 서버에 악성 PHP 스크립트를 삽입하여 해당 서버에 침투하려고 한다.
  2. 악성 스크립트가 실행되면, 서버는 $bind_port에 지정된 포트에서 바인드 쉘을 실행시키기 시작한다.
  3. 공격자는 바인드 쉘에 접근하기 위해 해당 서버의 IP 주소와 $bind_port로 연결을 시도한다.
  4. 연결에 성공하면, 공격자는 바인드된 쉘을 통해 원격으로 명령어를 실행하고 시스템을 조작할 수 있게 된다.

 

 

용어정리

백도어  : 백도어(Backdoor)는 컴퓨터 시스템 또는 소프트웨어에 삽입되어 보안 제어를 우회하거나 외부 공격자에 의해 원격으로 접근하고 제어할 수 있는 비공식적인 액세스 포인트나 기능을 나타낸다. 쉽게 말해, 백도어는 시스템이나 소프트웨어의 정상적인 접근 방식을 우회하여 접근하거나 조작할 수 있는 악성 코드나 설정을 말한다.

 


바인드 쉘은 악용 가능성이 높은 도구로, 시스템 보안 전문가와 관리자는 취약점 분석 및 보안 대책을 통해 바인드 쉘과 같은 공격으로부터 시스템을 보호해야 한다.

 

반응형