1. 실습 목적
이번 실습에서는 ish(ICMP Shell) 프로그램을 이용하여 두 대의 Linux 시스템 사이에 ICMP 기반 은닉 통신 채널을 구성해본다.
일반적인 원격 접속인 SSH는 TCP 22번 포트를 사용하지만, ish는 ICMP 프로토콜을 이용하여 명령어와 실행 결과를 주고받는다.
이를 통해 일반적인 원격 접속과 ICMP Shell 방식의 차이점을 확인하고, 은닉채널이 어떤 방식으로 동작하는지 이해하는 것이 목적이다.
2. 실습 환경
Server : Rocky Linux
Client : Rocky Linux
Tool : ICMP Shell v0.2
구성은 다음과 같다.
[ Rocky Linux 서버 ]
ishd 실행
↑
│ ICMP
↓
[ Rocky Linux 클라이언트 ]
ish 실행
서버에서는 ishd 데몬을 실행하고, 클라이언트에서는 ish 프로그램을 이용해 서버로 접속한다.
3. ish 설치
서버와 클라이언트 두 시스템 모두 동일하게 설치한다.
tar xvfz ish-v0.2.tar.gz
cd ISHELL-v0.2
dnf install -y gcc make
make linux
각 명령어의 의미는 다음과 같다.
- tar xvfz : 압축 해제
- cd ISHELL-v0.2 : 해당 디렉터리로 이동
- dnf install -y gcc make : 컴파일에 필요한 패키지 설치
- make linux : Linux 환경에 맞게 소스코드 컴파일
컴파일이 완료되면 ishd, ish 파일을 사용할 수 있다.
4. 서버에서 데몬 실행
첫 번째 Rocky Linux를 서버로 사용한다.
cd ISHELL-v0.2
./ishd
ishd는 서버 측 데몬으로, 클라이언트의 접속을 기다리는 역할을 한다.
5. 클라이언트에서 서버 접속
두 번째 Rocky Linux에서는 다음과 같이 실행한다.
cd ISHELL-v0.2
./ish 서버IP
예를 들어 서버 IP가 192.168.10.130이라면 다음과 같다.
./ish 192.168.10.130
정상적으로 연결되면 다음과 같은 메시지가 출력된다.
Connecting to 192.168.10.130...done.
6. 원격 명령 실행 확인
연결 후 간단한 명령어를 실행하여 서버에서 명령이 수행되는지 확인한다.
whoami
pwd
ip a
이때 출력되는 결과는 서버에서 실행된 명령의 결과이다.
7. root와 일반 사용자 차이 확인
이번 실습에서는 ishd를 root 계정과 일반 사용자 계정에서 각각 실행해보고 차이를 확인한다.
root로 실행
→ root 권한 범위에서 명령 실행 가능
일반 사용자로 실행
→ 해당 사용자 권한 범위에서만 명령 실행 가능
이 차이는 whoami 등의 명령을 통해 확인할 수 있다.
8. 프로세스 확인
실행 중인 ishd 프로세스를 확인한다.
ps -ef | grep ishd
실습이 끝난 후에는 해당 프로세스를 종료한다.
9. Wireshark를 이용한 ICMP 패킷 확인
ish는 ICMP를 이용하여 통신하기 때문에 Wireshark에서 다음 필터를 적용한다.
icmp
이후 클라이언트에서 명령을 실행하면 서버와 클라이언트 사이에 ICMP 패킷이 송수신되는 것을 확인할 수 있다.
10. SSH와 ish의 차이
SSH
클라이언트 → TCP 22번 포트 → 서버
ish
클라이언트 → ICMP → 서버
SSH는 일반적인 원격 접속 프로토콜이기 때문에 TCP 22번 포트를 사용한다.
반면 ish는 ICMP 프로토콜을 이용하기 때문에 일반적인 원격 접속과 다른 형태로 통신이 이루어진다.
11. 은닉채널이란?
은닉채널(Covert Channel)은 원래 통신용으로 사용되지 않는 방식이나 영역을 이용해 데이터를 전달하는 통신 방법을 의미한다.
ICMP는 원래 ping과 같이 네트워크 연결 상태를 확인하는 용도로 사용된다.
하지만 ish는 이 ICMP 통신을 이용하여 명령어와 실행 결과를 전달한다.
따라서 ICMP Shell은 은닉채널의 예시로 볼 수 있다.
12. 실습 결과
이번 실습을 통해 ICMP Shell을 이용하여 Linux 시스템 사이에서 원격 명령을 실행할 수 있음을 확인하였다.
또한 일반적인 SSH 통신과 달리 ICMP 프로토콜을 이용하여 명령 및 결과를 전달하는 것을 확인하였다.
이를 통해 정상적인 네트워크 프로토콜도 목적과 다르게 사용될 수 있으며, 보안 관점에서는 단순히 포트 번호만 확인하는 것이 아니라 패킷의 내용과 통신 패턴까지 함께 분석해야 한다는 점을 확인할 수 있었다.