[normaltic 비기너 클래스 1기] 2023-07-26 3주차 내용 정리

2023. 7. 28. 00:38normaltic 비기너 클래스 1기/내용 정리

쉘 (Shell)

 

쉘(Shell)은 커널(Kernel)과 사용자 간의 다리역할을 하는 것으로 사용자로부터 명령어를 입력받으면 그것을 해석하고 프로그램을 실행시켜 주는 역할을 하는 인터페이스이다. 쉘은 일반적으로 CLI와 GUI의 두 종류로 분류된다. 

 

  • CLI (Command Line Interface) : 글자를 입력하여 명령을 내리는 방식. 대표적으로 UNIX/LINUX에서 사용
  • GUI (Graphical User Interface) : 사용자가 편리하게 사용할 수 있도록 입출력 등의 기능을 알기 쉬운 아이콘 따위의 그래픽으로 나타낸 방식. 대표적으로 WINDOWS에서 사용

 

CLI (Command Line Interface)
GUI (Graphical User Interface)

 

원격 쉘 (Remote Shell)

 

원격 쉘(Remote Shell)은 다른 유저 또는 다른 컴퓨터에서 원격으로 쉘 명령을 실행하는 프로그램을 뜻한다. 원격 쉘은 클라이언트와 서버의 역할을 누가 맡냐에  따라 바인드 쉘(Bind Shell)리버스 쉘(Reverse Shell)로 나뉜다. 각 역할에 대해 간단히 설명하자면 서버는 포트를 열어 통신을 대기하는 역할이고, 클라이언트는 열린 포트를 통해 통신을 시도하는 역할이다.

 

바인드 쉘 (Bind Shell) : 서버 -  피해자, 클라이언트 - 공격자

바인드 쉘(Bind Shell)은 피해자측에서 서버의 역할을 맡고 공격자 측에서 클라이언트 역할을 맡는다.

 

(좌) 서버 역할을 맡고 있는 피해자측, (우) 클라이언트 역할을 맡고 있는 공격자측

 

위 그림에서 보이듯이 피해자측(좌)에서 nc 명령어를 사용하여 7777번 포트를 열어놓고 통신을 대기한다. 이때

-e /bin/bash 옵션으로 인해 7777번 포트로 통신을 시도하는 공격자 측에서 피해자 측의 쉘을 통해 명령어를 내릴 수 있다. 그리고 피해자 측에서 포트를 열어놓고 통신을 대기하면 공격자 측(우)에서 nc 명령어를 사용하여 7777번 포트에 통신을 시도한다. 아무런 제한(ex. 방화벽)이 없다면 통신이 성공적으로 연결되고 공격자 측은 피해자 측 컴퓨터에 원격으로 쉘을 통해 명령어를 내릴 수 있다.

 

리버스 쉘 (Reverse Shell) : 서버 -  공격자, 클라이언트 - 피해자

리버스 쉘(Reverse Shell)은 피해자측에서 클라이언트의 역할을 맡고 공격자 측에서 서버의 역할을 맡는다.

 

(좌) 클라이언트 역할을 맡고 있는 피해자측, (우) 서버 역할을 맡고 있는 공격자측

 

위 그림에서는 공격자측(우)이 nc 명령어를 사용하여 7777번 포트를 열어놓고 통신을 대기한다. 그리고 피해자 측(좌)은 공격자 측이 열어놓은 7777번 포트에 통신을 시도하는데 이때 -e /bin/bash 명령어를 사용하면 서버 역할을 맡는 사용자가 클라이언트의 쉘을 사용하도록 쉘을 갖다 받치는 기능을 한다.

 

바인드 쉘 (Bind Shell) vs 리버스 쉘 (Reverse Shell)

 

모의 침투 테스트에서 바인드 쉘을 사용하여 쉘을 획득할건지 리버스 쉘을 사용하여 쉘을 획득할 건지 선택을 하게 된다면 99% 리버스 쉘을 사용하게 될 것이다. 

 

 

그 이유로는 방화벽의 존재가 크다. 아무리 타겟 PC에서 임의의 포트를 열고 통신을 대기하여도 해당 포트로 통신을 연결하기 위해서는 방화벽을 거쳐야 하는데 방화벽에서 설정된 In Bound Rule(방화벽 외부에서 내부로 들어가기 위한 조건 혹은 규칙)으로 인해 일반적으로 22번 포트 (ssh 포트), 80번 포트 (웹 서버 포트) 이외의 포트로 통신 연결을 시도하는 모든 행위는 차단된다. 

 

 

그러나 타겟 PC에서 공격자 PC로 통신 연결을 시도하는 리버스 쉘은 바인드 쉘보다 비교적 쉽다. 그 이유는 Out Bound Rule(방화벽 내부에서 외부로 들어가기 위한 조건 혹은 규칙)로 인한 제한이 없기 때문이다. 방화벽은 내부에서 외부로의 행위에 대한 제한에 대해서는 In Bound Rule 보다 비교적 약하다. 그렇기에 모의 침투 테스트에서는 리버스 쉘을 사용하여 타깃 PC의 쉘을 획득하는 과정이 대부분이 될 것이다.