이번 실습은 ish(ICMP Shell) 를 이용해 ICMP 프로토콜로 통신하는 은닉채널의 동작 방식을 확인하는 실습이다.
일반적인 원격 접속은 SSH, Telnet과 같이 특정 TCP 포트를 사용한다. 하지만 ish는 ICMP 패킷을 이용해 명령어와 실행 결과를 주고받는 방식을 사용한다. ICMP는 원래 ping과 같이 네트워크 연결 상태를 확인하기 위한 프로토콜이지만, ish에서는 이를 원격 명령 전달에 활용한다.
1. ish 프로그램 설치
서버와 클라이언트에 동일한 방식으로 ish를 설치한다.
tar xvfz ish-v0.2.tar.gz
cd ISHELL-v0.2/
make linux
각 명령어의 의미는 다음과 같다.
- tar xvfz ish-v0.2.tar.gz : 압축 파일 해제
- cd ISHELL-v0.2/ : 압축을 푼 디렉터리로 이동
- make linux : Linux 환경에서 실행할 수 있도록 프로그램 컴파일
컴파일이 완료되면 주요 프로그램은 다음 두 가지다.
ishd : 서버 측 프로그램
ish : 클라이언트 측 프로그램
ishd의 d는 daemon을 의미하며, 클라이언트의 접속을 기다리는 서버 역할을 한다.
컴파일 과정에서 GCC 등의 패키지가 없으면 다음과 같이 설치할 수 있다.
dnf install -y gcc
Rocky Linux 계열에서는 dnf를 사용하며, 배포판에 따라 yum이나 apt를 사용할 수도 있다.
2. 클라이언트에서 서버 접속
PPT 예제에서는 클라이언트에서 다음과 같이 실행한다.
./ish 192.168.11.17
여기서
./ish
는 현재 디렉터리에 있는 ish 클라이언트를 실행한다는 뜻이고,
192.168.11.17
은 접속할 서버의 IP 주소다.
정상적으로 연결되면 다음과 같은 메시지가 나타난다.
ICMP Shell v0.2 (client)
Connecting to 192.168.11.17...done.
done이 출력되면 클라이언트와 서버 사이의 연결이 이루어진 것이다.
3. 원격 명령 실행
연결 이후 클라이언트에서 명령어를 입력할 수 있다.
예를 들어
ip a
를 입력하면 서버에서 해당 명령이 실행되고, 실행 결과가 다시 클라이언트 화면에 출력된다.
통신 구조를 간단하게 나타내면 다음과 같다.
클라이언트
│
│ 명령어
▼
ICMP 패킷
│
▼
서버의 ishd
│
│ 명령 실행
▼
실행 결과
│
▼
ICMP 패킷
│
▼
클라이언트
4. 왜 은닉채널인가?
일반적인 원격 접속은 다음과 같이 특정 프로토콜과 포트를 이용한다.
SSH TCP 22
Telnet TCP 23
HTTP TCP 80
따라서 패킷을 분석하면 어떤 종류의 통신인지 비교적 쉽게 확인할 수 있다.
반면 ish는 ICMP 패킷을 이용해서 명령어와 실행 결과를 전달한다.
즉 겉으로는
ICMP 통신
처럼 보이지만 실제로는 그 안에서
원격 명령
명령 실행 결과
가 전달되는 것이다.
이처럼 원래의 목적과 다른 방식으로 정보를 전달하기 위한 통신 경로를 은닉채널, 즉 Covert Channel이라고 한다.
5. Wireshark를 이용한 패킷 확인
PPT에 있는
접속 후 패킷의 흐름을 캡처해보자
라는 부분은 Wireshark를 이용하여 실제 통신을 확인하라는 의미다.
Wireshark에서 필터를 다음처럼 설정하면 ICMP 패킷만 확인할 수 있다.
icmp
그 상태에서 ish를 이용해 명령어를 실행하면 클라이언트와 서버 사이에서 ICMP 패킷이 계속 전달되는 모습을 확인할 수 있다.
실습에서는 다음 부분을 캡처해 두면 블로그 작성에 좋다.
- ish 설치 화면
- ishd 실행 화면
- ./ish 서버IP 접속 화면
- ip a 등의 명령 실행 결과
- Wireshark에서 ICMP 패킷이 보이는 화면
6. 실습 결과
이번 실습을 통해 ICMP와 같이 일반적인 네트워크 관리에 사용되는 프로토콜도 데이터를 전달하는 통로로 활용될 수 있다는 것을 확인할 수 있다.
특히 단순히 TCP/UDP 포트만 확인하는 방식으로는 이러한 통신을 쉽게 발견하기 어려울 수 있기 때문에, 보안 관점에서는 프로토콜의 종류뿐만 아니라 패킷 내부의 데이터와 통신 패턴까지 분석하는 것이 중요하다.
한 줄 정리
ish는 ICMP 패킷을 이용하여 원격 명령어와 실행 결과를 전달하는 프로그램이며, 이를 통해 ICMP 기반 은닉채널의 동작 원리를 확인할 수 있다.