
원격 시스템을 상호 연결하기 위한 간소화된 FTP 기반 명령 및 제어 채널
SharpFtpC2는 두 원격 컴퓨터 간의 명령 및 응답 전달에 FTP(S)를 사용하는 가능성을 탐구하기 위한 작은 실험 프로젝트입니다. 이 프로젝트는 임시 터널 역할을 하는 FTP 프로토콜을 사용하여, FTP 서버에 연결된 클라이언트로 작동하는 두 컴퓨터가 통신할 수 있도록 합니다. 요청과 응답의 교환을 추적하기 위해 간단한 세션 관리 체계가 사용됩니다.
SharpFtpC2는 기본적인 세션 관리 시스템을 사용합니다. 매우 초보적이지만, 통신을 동기화하고 관련성을 유지하는 역할을 하며, 이는 원격 시스템 간의 주고받음에 필수적입니다.
이 프로젝트는 git, svn 또는 유사한 프로토콜과 같은 버전 관리 시스템을 활용하여 손쉽게 이식할 수 있습니다.
네트워크 통신의 세부 사항에 관심이 있거나, C# 및 .NET Core로 실험해보고 싶다면 SharpFtpC2는 흥미로운 출발점이 될 수 있습니다. 완벽한 결과물을 기대하지 마세요. 하지만 아마도, 어쩌면, 이를 가지고 놀면서 흥미로운 것을 배울 수도 있습니다.
SharpFtpC2는 두 원격 컴퓨터 간의 통신 채널로 FTP(S)를 활용하는 가능성을 교육적으로 탐구하기 위해 만들어진 실험 프로젝트입니다. 이 프로젝트는 네트워크 통신, C#, 적대 시뮬레이션, 레드 팀, 악성 코드에 관심이 있는 개인을 위한 학습 자료로 설계되었습니다. 제작자로서, 추가 기능 요청이나 이 프로젝트를 무기화하거나 악의적인 목적으로 사용하지 말 것을 요청합니다. 핵심 의도는 교육적이며, 사용자는 콘텐츠를 책임감 있고 윤리적으로 사용할 것으로 기대됩니다.
SharpFtpC2는 Unprotect Project, 특히 네트워크 회피 카테고리에 기여하고자 하는 바람에서 탄생했습니다.
FTP를 "터널"로 사용하는 아이디어는 오랜 역사를 가지고 있습니다. 사실, 이것은 제가 프로그래밍 세계에 발을 담그기 시작한 2005년경의 즐거운 추억을 떠올리게 합니다. 그 당시, 저는 BlasterWar라는 이름을 사용했던 매우 창의적인 프랑스인을 만났습니다. 그는 BlasterX라는 프로젝트를 구상했는데, 시간이 지나 사라졌지만 당시로서는 상당히 전위적이었습니다.
BlasterWar의 프로젝트에서의 독창성은 에이전트가 제어 또는 해킹 장치로 다시 연결을 설정해야 하는 기존의 역방향 연결에 대한 대안을 제공하는 것이었습니다.
대신, BlasterWar는 대체 매체로 FTP(파일 전송 프로토콜)를 사용하기로 결정하고 그 주변에 포괄적인 원격 액세스 도구를 구축했습니다. 이 도구에는 화면 캡처, 키로깅, 시스템 관리와 같은 기능이 포함되어 있으며, 모두 FTP 터널을 통해 전송되었습니다. 당시 FTP는 널리 사용되었고 많은 웹사이트에서 무료 FTP 서버를 대중에게 제공했습니다. 이는 포트 포워딩이 필요한 역방향 또는 직접 연결에 대한 이상적인 대안이 되었습니다. 또한, 해커 머신의 IP 주소가 직접 노출되지 않기 때문에 명령 및 제어(C2)에 추가적인 난독화 계층을 제공했습니다.
오늘날 FTP를 터널로 사용하는 것은 새로운 개념이 아니며, 소수의 명령 및 제어(C2) 프레임워크가 이 프로토콜을 채택했습니다. 그러나 이러한 방식으로 FTP를 사용하는 것은 위험이 따릅니다. 특히 FTP는 네트워크를 통해 자격 증명을 평문으로 전송하고, 양 당사자가 이러한 자격 증명을 소유해야 하므로 다양한 공격에 취약합니다. FTP 서버는 SSL/TLS 암호화를 통합하는 FTPS를 점점 더 채택하여 이러한 보안 문제를 해결하기 위해 노력해 왔지만, 이 적응이 모든 내재된 위험에 대한 만병통치약은 아닙니다.
약간의 독창성과 기존 프로토콜에서 영감을 얻으면 기존 위험의 상당 부분을 해결할 수 있습니다.
이 프로젝트를 컴파일하려면 두 가지 구성 요소가 필요합니다: Visual Studio와 컨트롤러의 종속성인 CommandLineUtils.
이 프로젝트는 .NET Core를 사용하므로 코드 수정 없이 다양한 플랫폼으로 쉽게 컴파일할 수 있습니다. 그러나 대상 플랫폼에 맞게 특정 기능을 구현해야 할 수도 있습니다.
이 프로젝트를 빠르게 테스트하려면 Docker와 stilliard/pure-ftpd 이미지를 사용하는 것이 좋습니다. 이 이미지는 다양한 옵션을 지원하여 자체 FTP 서버를 쉽게 빠르게 설정할 수 있습니다.
docker pull stilliard/pure-ftpd
docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST: 127.0.0.1" -e "ADDED_FLAGS=-E -A -X -x" -e FTP_USER_NAME=dark -e FTP_USER_PASS=toor -e FTP_USER_HOME=/home/dark stilliard/pure-ftpd
docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST: 127.0.0.1" -e "ADDED_FLAGS=-E -A -X -x --tls=2" -e FTP_USER_NAME=dark -e FTP_USER_PASS=toor -e FTP_USER_HOME=/home/dark -e "TLS_CN=localhost" -e "TLS_ORG=maislaf" -e "TLS_C=FR" stilliard/pure-ftpd
필요에 따라 설정을 조정하세요. 그러나 이 테스트 FTP 서버를 로컬 네트워크나 공용 네트워크에 노출하지 않는 것이 좋습니다. 이 컨테이너를 호스트 머신에만 제한하여 노출을 최소화하는 것이 더 현명합니다.
ADDED_FLAGS 옵션을 사용하면 pure-ftpd 서버를 미세 조정할 수 있습니다. 모든 플래그에 대한 설명은 여기에서 찾을 수 있습니다.
일부 플래그는 C2 프로토콜의 작동 방식을 수정해야 할 수도 있습니다. 예를 들어 -K 옵션을 사용하여 모든 파일을 유지하면 FTP를 통한 파일 삭제가 비활성화됩니다. 현재 C2 프로토콜이 이 기능을 사용하므로 파일 이름 변경이나 이동과 같은 대체 접근 방식을 고려해야 할 수도 있습니다.
에이전트와 C2 간의 모든 통신의 무결성과 기밀성을 보장하기 위해 RSA 및 AES-GCM 256비트 알고리즘을 사용하여 통신 프로토콜에 암호화가 원활하게 통합되었습니다. 이 기능의 주요 목적은 손상된 FTP 서버가 악의적인 명령을 전달할 가능성을 차단하는 것입니다. 암호화를 사용하면 에이전트의 공개 키에 접근하지 않고는 명령 주입이 불가능합니다. 마찬가지로 C2의 공개 키를 소유하지 않고는 가짜 에이전트 응답을 주입할 수 없습니다.
자체 키 쌍(에이전트용 하나와 C2용 하나)을 더 쉽게 생성할 수 있도록 RSAKeyHelper라는 타사 도구를 포함했습니다. 애플리케이션을 실행할 때마다 새로 생성된 공개 키와 개인 키 쌍이 표시되며, 암호화를 사용하기로 선택한 경우 프로그램 내에서 사용할 수 있습니다.

모든 것이 의도한 대로 작동하는지 확인하기 위해 동일한 도구 내에서 문자열 암호화를 테스트할 수 있는 기능도 통합했습니다.

"3.0 최종" 버전의 릴리스는 이 프로젝트의 완성을 의미합니다. 더 이상 기능을 추가하지 않을 것입니다. 이 PoC의 목적은 FTP(S)를 사용하여 신뢰할 수 있고 안전한 C2를 만드는 방법을 시연하는 것이었습니다. 자신만의 기능을 갖춘 버전을 개발하는 것을 권장합니다. 연습으로, 장기 실행 작업 중에 애플리케이션이 중단되지 않도록 멀티스레딩 작업을 구현하는 것을 고려할 수 있습니다.
그러나 잠재적인 버그나 최적화 기회를 해결하는 측면에서 프로젝트에 대한 지원은 계속 제공할 것입니다.
(에이전트 목록)

(활성(컨텍스트) 에이전트에 명령 실행)

(위험한 작업 사용자 확인이 포함된 에이전트 콘솔 디버그 창)
