
Frida를 사용하여 TeamViewer 메모리에서 비밀번호를 추출하는 도구
안녕하세요. 이 글에서는 TeamViewer의 비밀번호 보안에 대한 저희의 작은 연구를 소개하려고 합니다. 이 방법은 침투 테스트 중 post exploitation 단계에서 TeamViewer를 사용해 다른 컴퓨터에 접근해야 할 때 도움이 될 수 있습니다.
며칠 전 저는 Windows 클라우드 VPS에서 TeamViewer를 사용해 작업했습니다(사용자 지정 비밀번호를 설정해 둔 상태). 작업을 마치고 연결을 끊었는데, 다음에 연결하려고 할 때 TeamViewer가 비밀번호를 자동으로 채워 넣는 것을 확인했습니다.

저는 "흥미로운데, 어떻게 하면 비밀번호에 접근할 수 있을까? 비밀번호는 내 컴퓨터에 어떻게 저장되는 걸까?"라고 생각했습니다.
TeamViewer의 메모리를 덤프한 다음 비밀번호를 grep했습니다.

오 예에에, 😊 비밀번호는 메모리에 Unicode 형식으로 저장됩니다. 즉, TeamViewer 작업을 마치고 프로세스를 종료하지 않으면(또는 TeamViewer를 종료하지 않으면

비밀번호가 메모리에 저장됩니다)
분석 결과, 첫 번째 빨간 영역은 시작 매직 데이터(start magic data)이고 두 번째 영역은 끝 매직 데이터(end magic data)라는 것을 알게 되었습니다(때때로 끝 매직 데이터의 값 = 00 00 00 20 00 00입니다).
메모리에서 비밀번호를 추출하기 위해 Python과 C++ 언어로 두 개의 미니 프로그램을 작성했습니다.
멋진 도구를 만들어 준 Frida 팀에 감사합니다! 우리의 Python 스크립트는 TeamViewer.exe 프로세스에 attach하여 이 프로세스에 있는 각 라이브러리의 기본 주소(base address)와 메모리 크기를 얻습니다. 그런 다음 메모리 영역을 하나씩 덤프하면서 시작 부분에 [00 88] 바이트가 있고 끝 부분에 [00 00 00] 바이트가 있는 부분을 검색하여 배열에 복사합니다. 그다음 마지막 단계로 정규식과 비밀번호 정책에 따라 최종 디코딩할 원시 데이터를 선택합니다.

C++ 코드를 실행하면 다음과 같은 화면을 볼 수 있습니다. “asdQWE123”이 비밀번호입니다.

C++ 예제

Python 예제
