해킹 관점에서 쉘(Shell)은 중요한 용어임.
Linux 시스템에서 쉘은 키보드를 통해 사용자로부터 입력을 받아 이러한 명령어를 운영 체제에 전달하여 특정 기능을 수행하는 프로그램임.
컴퓨팅 초기의 쉘은 시스템과 상호 작용하는 데 사용할 수 있는 유일한 인터페이스였음.
그 이후로 Linux 터미널, Windows 명령줄(cmd.exe) 및 Windows PowerSheel 과 같은 명령줄 인터페이스(쉘)를 보완하기 위해 그래픽 사용자 인터페이스(GUI)와 함께 더 많은 운영 체제 유형 및 버전이 등장했음.
대부분의 Linux 시스템은 운영 체제와 상호 작용하기 위한 쉘 프로그램으로 Bash(Bourne Again Shell) 라는 프로그램을 사용함.
Bash 는 Unix 시스템의 원래 쉘 프로그램인 sh 의 향상된 버전임.
Bash 외에도 Zsh, Tcsh, Ksh, Fish Shell 등을 포함하되 이에 국한되지 않는 다른 쉘도 있음.
우리는 종종 상자(시스템)에 "쉘을 얻는 것(getting a shell)"에 대해 다른 사람들이 이야기하거나 듣게 됨.
이는 대상 호스트가 악용되었으며 쉘 수준 접근(일반적으로 bash 또는 sh)를 얻었으며 마치 호스트에 로그인한 것처럼 대화식으로 명령어를 실행할 수 있음을 의미함.
쉘은 웹 애플리케이션이나 네트워크/서비스 취약점을 이용하거나 자격 증명을 획득하고 원격으로 대상 호스트에 로그인하여 획득할 수 있음.
쉘 연결에는 아래 3 가지 주요 유형이 있음.
쉘
유형 |
설명 |
리버스 쉘(Reverse Shell) |
공격 시스템의 "리스너"에 다시 연결을 시작함. 피해자의 방화벽 우회 및 사설 IP 문제로 바인드 쉘보다 리버스 쉘을 거의 많이 쓰임. |
바인드 쉘(Bind Shell) |
대상 호스트의 특정 포트에 "바인딩"하고 공격 시스템로부터 연결을 기다림. |
웹쉘(Web Shell) |
일반적으로 웹 브라우저(대화형이거나 반대화형일 수 있음)를 통해 운영 체제에 명령어를
실행함. 또한 단일 명령어를 실행하는
데 사용될 수도 있음. (보통 원라인 웹쉘이라고 함) 침해 사고의 대다수 공격에 많이 쓰임. |
각 유형의 쉘에는 고유한 사용 사례가 있으며, 쉘을 얻는 방법은 여러 언어로 작성된 프로그램(예 : Python, Perl, Go, Bash, Java, awk, PHP 등)일 수 있음.
이는 대상 호스트에서 공격 시스템으로의 연결을 용이하게 하고 "쉘" 접근를 얻기 위한 작은 스크립트이거나 더 크고 복잡한 프로그램일 수 있음.
댓글 없음:
댓글 쓰기