🐚Bind Shell vs Reverse Shell

DATE : 2024/2/12

What is Bind Shell?

Bind Shell이란, 피해자가 서버인 거 처럼 & 공격자가 사용자인 거 처럼 행동함으로써

Shell을 얻는 걸 말한다.

"서버인 거 처럼 행동한다"는 건, 포트를 열고 들어오는 요청을 듣고 있다는 걸 비유한 것으로

포트(4444)를 하나 열면

열려 있는 포트를 통해 연결을 맺을 수 있게 된다.

참고로 nc command는 TCP Socket으로 연결 & 통신할 수 있는 명령어로 두 PC가 연결을 맺고 나면

한 쪽에서 입력한 메세지가 다른 한 쪽으로 전달 되면서 서로 통신을 할 수 있게 된다!

이때..! 서로 메세지를 주고 받는 게 아닌 명령어의 결과를 얻고 싶다면 어떻게 하면 될까??

피해자 측에서 4444 포트를 열고 기다리는데 중요한 건,

연결을 맺고 난 뒤 실행할 파일에 bash shell을 연결한다는 점이다.

피해자가 위와 같이 shell을 연결할 상태로 포트를 열어두면

해당 포트로 연결을 맺은 공격자가 명령어를 실행하고 그 결과가 출력 되는 걸 볼 수 있다.

즉, 공격자의 PC에서 입력한 명령어가 피해자 PC에서 실행된다는 것!

그렇다 보니 현재 공격자 PC에서 나오는 명령어의 결과는 사실 피해자 PC에서 실행된 결과이다.

이처럼 피해자가 포트를 열고 공격자가 해당 포트로 연결을 맺는 형태로

피해자 PC의 Shell을 따는 걸 Bind Shell이라 한다.

What is Reverse Shell?

reverse shell이란, 앞서 배운 bind shell을 반대로 수행하는 거라 할 수 있다.

bind shell에서는 피해자가 포트를 여는 측이라면 reverse shell공격자가 포트를 열고

피해자가 해당 포트로 shell을 들고 들어오는 형태이다.

공격자가 4444 포트를 열고 기다리다 보면

피해자가 자신의 bash shell을 들고 공격자 PC에 열린 포트로 연결을 청해온다.

이렇게 해서 공격자와 피해자 PC가 연결 되고 나면

공격자는 자신의 PC에서 명령어를 입력함으로써

손쉽게 피해자 PC 이곳 저곳을 돌아다닐 수 있고

중요한 정보를 탈취하거나 PC를 다운 시키는 등 피해자 PC를 완전히 장악할 수 있게 된다.

이처럼 피해자가 직접 shell을 들고 와 공격자 PC와 연결을 맺는 형태로 shell을 따는 것

reverse shell이라고 한다.

bind shell과 reverse shell은 정확히 피해자와 공격자 간의 연결을 맺는 방향이 정반대인 형태로

수행되는 빈도를 따져 보면 bind shell보다 reverse shell이 압도적으로 많이 일어난다.

위에서는 정말 심플하게 "피해자가 포트를 열고 기다리면 공격자가 들어와 shell을 딴답니다~"라고 했지만

사실 방화벽이라는 친구가 오고 가는 네트워크 트래픽을 보다가 흔히 사용하지 않는 7777 or 4444와 같은

포트로 들어가는 공격자의 데이터를 발견하면 "얘 이거 이거 수상하네"하고 트래픽을 막아버린다.

하지만 반대로 자신이 지키는 PC에서 나가는 트래픽은 웬만해서 막지 않기 때문에

들어가는 것보다 나오는 트래픽에 관대하다는 점을 이용해

공격자가 포트를 열고 피해자가 연결해오도록 하는 reverse shell 형태가 많이 이루어진다는 점!

이렇게 해서 bind shell & reverse shell에 관해 간단히 살펴보았다!

각각의 개념과 함께 왜 reverse shell을 더 많이 수행하는 것인지 알아두면 좋을 듯 싶다!

(+) 참고로 설명하자면, 우리는 피해자의 shell을 얻고자 하는 것이기 때문에

피해자가 포트를 여는 쪽이든, 연결을 해오는 쪽이든 shell을 연결하는 건 피해자 측이라는 것!

Last updated