
SSH-Snake는 SSH 개인 키 및 호스트 탐색의 사후 침투(post-exploitation) 작업을 자동화하는 자가 전파, 자가 복제, 파일리스(file-less) 스크립트입니다.
🐍 SSH-Snake는 시스템에서 발견된 SSH 개인 키를 사용하여 자동 네트워크 탐색을 수행하고, 특정 시스템에서 시작하여 SSH와 SSH 개인 키를 사용하여 네트워크가 어느 정도까지 침해될 수 있는지 식별함으로써 네트워크와 그 종속성에 대한 포괄적인 지도를 생성하도록 설계된 강력한 도구입니다.
SSH-Snake는 SSH를 통해 연결된 시스템 간의 관계를 자동으로 드러낼 수 있으며, 이는 수동으로 수행하려면 엄청난 시간과 노력이 필요합니다.
즉, SSH-Snake는 다음 작업을 자동으로 반복적으로 수행합니다:
user@host)을 찾습니다.완전히 자가 복제 및 자가 전파되며, 완전히 파일리스(fileless) 방식입니다. 여러모로 SSH-Snake는 실제로 웜입니다: 스스로 복제하여 한 시스템에서 다른 시스템으로 최대한 멀리 퍼져 나갑니다.
수퍼 마리오 게임처럼 SSH 키를 사용하여 시스템 사이를 수동으로 이동하는 대신, SSH-Snake가 작업을 대신 수행하게 하세요.
이 도구는 해킹 목적으로 설계되었지만, 시스템 관리자도 인프라와 네트워크를 더 잘 이해하는 데 사용할 수 있습니다. 발견된 개인 키 출력을 비활성화하려면 이 코드 줄을 주석 처리하세요.
이 스크립트가 실제로 어떻게 작동하는지, 기술적 세부 사항, 흥미로운 발견, 설계 결정, 벤치마킹 및 배운 점에 대한 심층 분석은 이 블로그 게시물을 확인하세요. 이 소프트웨어는 Joshua Rogers가 작성했습니다.
매우 작은 네트워크에서 SSH-Snake 출력의 축소된 스크린샷입니다. |
|---|
파란색 노드는 _대상_이 자신에게 연결할 수 있음을 나타냅니다(user@host<-->user@host). 빨간색 간선은 연결이 양방향임을 나타냅니다(user1@host1<-->user2@host2). |
|---|
SSH-Snake는 다운로드하거나 bash로 파이프할 수 있습니다:
wget https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh
bash ./Snake.nocomments.sh
또는
curl https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh | bash
SSH-Snake는 인간 공격자가 SSH 개인 키를 발견하고 연결에 사용할 수 있는 대상을 찾기 위해 수행하는 작업을 완벽하게 에뮬레이트합니다. 전적으로 Bash로 작성되었으며, 주요 Linux(및 MacOS) 시스템에서 일반적으로 사용할 수 있는 최소한의 의존성 세트로 작동합니다: bash, ssh, coreutils, awk, uniq, sort, grep, tr, find, cat. getent 또는 dscacheutil이 필요합니다. sed는 첫 번째 시스템에서만 필요합니다. 마찬가지로 sudo, hostname, , , , , , 도 사용될 수 있지만 필수는 아닙니다(스크립트는 없는 경우를 정상적으로 처리합니다). 필요한 패키지가 없는 시스템이 발견되면 정상적으로 실패하여 해당 시스템에서 검색을 계속할 수 없음을 사용자에게 알리고(이전 시스템으로 돌아가서 계속 진행합니다).
SSH-Snake는 완전히 파일리스입니다: 사용자가 스크립트를 실행하면 stdin과 bash 인수(SSH를 통해)를 통해 대상의 bash로 전달됩니다. 검색된 시스템에는 스크립트의 물질적 증거가 남지 않습니다: 스크립트 실행의 유일한 증거는 프로세스 트리와 필연적으로 발생하는 상당한 양의 유효하지 않은 SSH 시도뿐입니다.
SSH-Snake는 깊이 우선 접근 방식을 사용하여 탐색합니다: 한 시스템에 연결되면 해당 시스템에서 더 연결을 시도한 후 역추적합니다.
SSH-Snake라는 이름은 스크립트의 출력이 네트워크를 위아래로 기어다니는 뱀처럼 보이기 때문에 붙여졌습니다. 그러나 게임 Snake와 달리 SSH-Snake는 자신의 꼬리를 물 때(이미 검색했거나 현재 검색 중인 시스템에 연결) 죽지 않습니다: 단지 정상적으로 연결 방법을 출력하고, 다시 검색하지 않고 반환합니다(무한 재귀를 피하기 위해).
SSH-Snake는 다양한 Linux 배포판과 MacOS(Homebrew Bash 설치)에서 테스트되었습니다. 호환되지 않는 Linux 기반 OS를 발견하면 보고서를 제출해 주세요.
.bash_history 항목에서 SSH 개인 키 파일 발견,SSH-Snake에는 구성 가능한 몇 가지 일반 설정이 있습니다. 이 설정은 SETTINGS.md#general-settings에 문서화되어 있습니다.
SSH-Snake는 또한 시스템에서 SSH 개인 키를 발견하고 연결을 시도할 호스트 및 대상을 발견하는 데 사용할 수 있는 다양한 구성 가능/플러그 앤 플레이 전략(함수)을 제공합니다. 합리적인 기본값이 제공되지만, 가능한 한 철저하게 검색하려면 더 많은 발견 기술을 활성화하는 것이 도움이 될 수 있습니다. 검색 시간이 오래 걸리는 경우 일부 발견 기술을 비활성화하면 도움이 될 수 있습니다. 하나의 전략(find_ssh_keys)을 제외한 각 전략은 켜고 끌 수 있습니다. 이러한 내용은 SETTINGS.md#configurable-discovery-strategies에 문서화되어 있습니다.
SSH-Snake의 원시 출력에는 발견된 개인 키, 대상 및 오류 메시지에 대한 정보가 혼합되어 있습니다.
SSH-Snake 전체 출력에 대한 자세한 설명은 OUTPUT.md에서 확인할 수 있습니다.
출력 예시는 example-output.log에서 확인할 수 있습니다.
SSH-Snake의 출력을 사용하여 스크립트가 탐색한 네트워크의 그래프/시각화를 생성할 수 있습니다.
SSH-Snake 출력에서 이미지/시각화를 생성하고 해석하는 방법에 대한 자세한 설명은 GRAPHICS.md에서 확인할 수 있습니다.
SSH-Snake가 탐색한 네트워크의 시각화를 생성하는 기능 외에도 세 가지 다른 도구가 제공됩니다. 즉:
forward-lookup-host.py: 소스 호스트 또는 대상이 주어지면 직접 또는 간접적으로(즉, 3차 시스템을 통해) 액세스할 수 있는 모든 시스템을 결정합니다.reverse-lookup-host.py: 대상 호스트 또는 대상이 주어지면 직접 또는 간접적으로 액세스할 수 있는 모든 시스템을 결정합니다.shortest-path-create-chain.py: 호스트 또는 대상 A와 B가 주어지면 두 대상을 연결하는 최단 경로를 결정합니다.세 번째 도구는 대상 A에서 대상 B로 연결하는 데 사용할 수 있는 명령도 생성합니다. 예:
$ python3 tools/shortest-path-create-chain.py --file output.log --src '[email protected]' --dest '[email protected]'
Shortest path from [email protected] to [email protected]: [email protected]>[email protected]>[email protected]>[email protected]
[..]
ssh -i "/home/jrogers/.ssh/key" [email protected] 'sudo ssh -i "/root/.ssh/id_rsa" [email protected] 'ssh -i "/tmp/key" [email protected]''
스크립트가 상당히 크기 때문에(실제로 Quine이기 때문에 자동으로 here-document로 로드할 때) bash가 임시 파일에 쓰게 됩니다(65535바이트보다 크기 때문).
크기를 줄여 100% 파일리스 상태를 유지하기 위해 Snake.nocomments.sh에는 모든 주석, 불필요한 공백 및 빈 줄이 제거된 버전이 포함되어 있습니다. 이렇게 하면 파일 크기가 줄어들어 bash가 임시 파일을 생성하지 않습니다.
스크립트 관련 버그나 문제가 발생하면 GitHub 이슈로 보고해 주세요. 구성 설정을 포함해 주세요.
특히 스크립트에서 포착되지 않은 오류와 관련된 흥미로운 [line] 출력에 관심이 있습니다.
IPv4 전용: 최고의 프로그램들처럼 이 스크립트는 IPv6를 지원하지 않습니다. 가까운 시일 내에 지원이 추가될 것 같지는 않습니다.
포트 22 전용: SSH가 22번 포트에서 실행된다는 일반적인 가정이 있습니다.
GNU coreutils: 스크립트는 GNU coreutils에 크게 의존합니다. 스크립트에 GNU-ism이 얼마나 사용되었는지(사용되었다면) 확인하지 못했습니다.
현재 스크립트는 SSH 에이전트 소켓을 찾지 않습니다.
iptimeoutarpifconfigipconfigxargs