KOROMOON

착한 사마리아인이 되고 싶습니다.

8/21/2024

해킹(Hacking) 관점에서의 쉘(Shell)



해킹 관점에서 쉘(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 등)일 수 있음.

이는 대상 호스트에서 공격 시스템으로의 연결을 용이하게 하고 "쉘" 접근를 얻기 위한 작은 스크립트이거나 더 크고 복잡한 프로그램일 수 있음.


댓글 없음:

댓글 쓰기