
MITM을 통한 바이너리 패치: BackdoorFactory + mitmProxy.
BLOG: http://secureallthethings.blogspot.com/2017/08/closing-door-end-of-backdoor-factory.html
보안 전문가와 연구자만을 위한 도구입니다.
###이제 v.0.17 >= MITMPROXY >= v.0.11 에서만 동작합니다.
Docker:
# sudo echo 1 > /proc/sys/net/ipv4/ip_forward # linux
# sudo sysctl -w net.inet.ip.forwarding=1 # macOS
docker pull secretsquirrel/bdfproxy
docker run -it -p 8080:8080 secretsquirrel/bdfproxy bash
# ./bdf_proxy.py
Kali에 설치하려면:
apt-get update
apt-get install bdfproxy
Black Hat USA 2015:
Video: https://www.youtube.com/watch?v=OuyLzkG16Uk
Paper: https://www.blackhat.com/docs/us-15/materials/us-15-Pitts-Repurposing-OnionDuke-A-Single-Case-Study-Around-Reusing-Nation-State-Malware-wp.pdf
DerbyCon 2014:
Video: http://www.youtube.com/watch?v=LjUN9MACaTs
약 18분 지점부터 BDFProxy 부분이 나옵니다.
개발자에게 연락하려면:
IRC:
irc.freenode.net #BDFactory
Twitter:
@midnite_runr
이 스크립트는 두 개의 라이브러리를 기반으로 동작합니다: The Backdoor Factory (BDF)와 mitmProxy.
###개념: 다운로드 중 바이너리를 MITM 방식으로 패치합니다.
###이유: 많은 보안 도구 웹사이트들이 여전히 비 SSL/TLS 방식으로 바이너리를 제공하기 때문입니다.
간단한 목록은 다음과 같습니다:
sysinternals.com
Microsoft - MS Security Essentials
거의 모든 안티바이러스 회사
Malwarebytes
Sourceforge
gpg4win
Wireshark
기타...
네, 그 앱들 중 일부는 자체 검사(self checking) 메커니즘으로 보호됩니다. 저는 개념 증명으로 NSIS 검사를 자동으로 우회하는 방법을 연구해 왔습니다. 하지만 그것이 다운로드 중 비트 플립(bit flipping)과 악성 페이로드 실행이라는 근본적인 문제를 막지는 못합니다. 또한 BDF는 기본적으로 다운로드 중 Windows PE 인증서 테이블 포인터를 패치하여 바이너리에서 서명을 제거합니다.
##의존성:
Pefile - 최신 버전
ConfigObj
mitmProxy - Kali 빌드 .10
BDF - 최신 버전
Capstone (BDF에 포함)
##지원 환경: 모든 Kali Linux 빌드에서 테스트되었습니다. 물리적인 고성능 랩톱, Raspberry Pi, VM 등 모두 BDFProxy를 실행할 수 있습니다.
##설치: BDF는 bdf/ 에 있습니다.
최신 버전을 받으려면 다음을 실행하세요:
./install.sh
또는:
git clone https://github.com/secretsquirrel/the-backdoor-factory bdf/
인증서 오류가 발생하면 다음을 실행하세요:
mitmproxy
mitmProxy가 로드된 후 [Ctr+C]로 종료합니다.
##사용법: 사용할 때마다 모든 것을 업데이트하세요:
./update.sh
CONFIG를 읽으세요!!!
-->bdfproxy.cfg
BDFProxy를 실행하기 전에 C2 호스트와 포트 설정을 구성해야 합니다. 서로 다른 페이로드 간에 C2 PORT 설정을 겹치지 마십시오. 그러면 Linux 셸이 Windows 머신으로 전송되어 곳곳에서 세그폴트(segfault)가 발생할 것입니다. 실행 후에는 C2 통신 설정을 돕기 위한 Metasploit 리소스 스크립트가 생성됩니다. 주의 깊게 확인하세요. 참고로 [Overall] 섹션 밖의 모든 것은 실시간으로 업데이트되므로 환경에 맞게 설정을 변경하기 위해 프록시를 종료할 필요가 없습니다.
잠깐! MITM을 수행할 머신을 구성해야 합니다! wifiPineapple을 사용한다면 hack5에서 배포한 스크립트를 수정하여 설정을 도와드렸습니다. ./wpBDF.sh를 실행하고 환경에 맞는 올바른 구성을 입력하세요. 이 스크립트는 iptables를 구성하여 http(비 SSL) 트래픽만 프록시로 보냅니다. 다른 모든 트래픽은 정상적으로 전달됩니다.
그런 다음:
./bdf_proxy.py
다음은 프록시의 가능한 물리적 설정에 대한 멋진 ASCII 아트입니다:
LAN 사용:
<Internet>----<mitmMachine>----<userLan>
WiFi 사용:
<Internet>----<mitmMachine>----<wifiPineapple>)))
##테스트:
Firefox와 FoxyProxy를 사용하여 브라우저로 설정을 테스트하고 싶다고 가정합니다.
구성을 다음과 같이 업데이트하세요:
transparentProxy = None
FoxyProxy가 BDFProxy를 프록시로 사용하도록 구성하세요.
구성 파일의 기본 포트는 8080입니다.
##로깅:
저희는 로깅을 지원합니다. 프록시 창은 테스트 중인 클라이언트에 따라 엄청난 양의 고양이 링크로 빠르게 채워질 것입니다. tail -f proxy.log를 사용하여 블랙리스트 설정에 의해 패치되거나 차단되는 항목을 확인하세요. 그러나 바이너리를 수동으로 패치하기로 선택한 경우 메인 프록시 창도 주시하세요. 상황이 빠르게 진행되며 배후에서는 트래픽이 멀티스레딩으로 처리되지만, 초기 요청과 응답은 사용자가 볼 수 있도록 잠겨 있습니다.
##공격 시나리오 (모두 대상자의 허가를 받아야 합니다): -Evil Wifi AP -Arp Redirection -배선실(wiring closet)에서의 물리적 설치 -선호하는 ISP에서의 논리적 설치
##버그 신고
버그는 발생할 수 있습니다. 하지만 문제를 이해하지 못하면 도움을 드릴 수 없습니다.
이슈는 여기에 제출하세요: https://github.com/secretsquirrel/BDFProxy/issues
다음 명령어 출력의 정보를 포함하세요 (긴 명령어는 pastebin을 사용하세요):
# bdfproxy는 v11 ~ v17만 지원합니다
$ mitmproxy --version
$ uname -a
# 아마 pastebin을 사용하세요
$ cat bdfproxy.cfg
$ ./bdf_proxy.py
###변경 로그:
####07/04/2016
BDF Preprocessor 및 mitmProxy v17 지원
####12/20/2015
BDF => CODE_SIGN의 PE 코드 서명을 지원하도록 bdfproxy.cfg에 구성 옵션 추가 자세한 내용은 BDF README 참조
####11/13/2015
python-magic 의존성 제거 - 동일한 이름을 가진 두 개의 라이브러리가 있어 혼란스럽기 때문입니다.
####10/19/2015
BDF Import Directory 패치가 새 섹션이 아닌 코드 케이브(code cave)에 적용되도록 지원 추가. 이 기능을 사용하려면 bdfproxy.cfg 파일에서 IDA_IN_CAVE를 True로 업데이트하세요. 실험적 기능입니다...
####8/12/2015
PE replace 방식 지원 추가 - 다운로드한 바이너리를 공격자가 제공한 바이너리로 교체합니다. 사용하려면 PATCH_METHOD를 replace로 변경하고 SUPPLIED_BINARY를 제공하세요.
####8/6/2015
onionduke 지원 추가. 사용하려면 PATCH_METHOD를 onionduke로 변경하고 SUPPLIED_BINARY를 대상 실행 파일에 바인딩하려는 바이너리로 설정하세요.
x86 및 x86_64 PE 바이너리 모두에 대해 PE 매니페스트의 requestedExecutionLevel을 highestAvailable로 검사하고 패치하는 기능 추가. RUNAS_ADMIN을 True로 설정하세요.
XP_MODE 플래그를 True로 설정하여 레거시 XP 머신 지원 여부를 설정하는 기능 추가. 이 값을 FALSE로 설정하면 AV의 에뮬레이터가 실패할 수 있어 AV 회피에 도움이 될 수 있습니다.