45. CTF 정찰: OSINT 기법 완전 정복
OSINT는 공개된 정보를 많이 모으는 경쟁이 아니라, 출처와 시간 범위를 통제하며 가설을 검증하는 작업이다. CTF에서는 문제에서 허용한 도메인·계정·파일만 조사하고, 실제 사람이나 조직을 대상으로 한 접촉·로그인·스캔은 하지 않는다. 공개되어 있다는 사실이 사용 목적까지 허가한다는 뜻은 아니다.
질문을 증거로 바꾸기
먼저 단서를 원문 그대로 보존하고, “누가 만들었나”, “언제 공개됐나”, “어떤 식별자가 반복되나”처럼 검증 가능한 질문으로 쪼갠다. 웹 아카이브는 삭제된 내용의 진실을 보증하지 않으므로 캡처 시각과 원본 URL을 함께 기록한다. 검색 연산자는 결과를 발견하는 데만 쓰고, 결과 페이지를 근거로 삼을 때는 실제 문서를 열어 문맥과 권한 범위를 확인한다.
파일 분석은 메타데이터가 주장하는 사실과 파일 내용이 일치하는지 비교하는 일이다.
exiftool sample.jpg
sha256sum sample.jpg
strings -a -n 6 sample.bin | grep -iE 'flag|hint|token'
EXIF의 GPS나 사용자명은 단서일 뿐이며 현재 소유자나 위치를 확정하지 않는다. 실습 파일에서 binwalk, zsteg, steghide를 사용할 때도 파일 형식과 도구 출력의 신뢰 경계를 구분한다. 비밀번호를 모르는 아카이브를 무작정 크래킹하는 식으로 범위를 넓히지 않는다.
도메인과 저장소의 시간축
허가된 도메인에 대해 dig로 필요한 레코드만 조회하고, ANY가 완전한 정보를 준다고 기대하지 않는다. 인증서 투명성 데이터는 인증서에 등장한 이름을 보여줄 뿐 현재 활성 호스트를 보장하지 않는다. Git 저장소에서는 커밋·브랜치·릴리스의 시간축을 비교하되, 발견한 자격 증명을 사용하지 말고 즉시 마스킹해 보고한다.
dig +short A example.test
dig +short TXT example.test
git log --all --oneline --decorate
패킷 캡처나 공개 문서에서도 동일한 규칙이 적용된다. http.request.method == "POST" 같은 필터는 후보를 좁힐 뿐, 내용의 민감도나 의도를 판정하지 않는다. 이름이 같은 계정은 동일 인물이라는 증거가 아니므로, 독립적인 출처 두 개 이상이 같은 가설을 지지하는지 확인한다.
재현 가능한 기록
각 발견에는 URL 또는 파일 해시, 조회 시각, 관찰한 문자열, 그 문자열이 가설을 어떻게 지지하는지를 남긴다. 자동화는 반복 조회를 줄이는 정도로 사용하고, 대상 서버에 과도한 요청을 보내지 않는다. 최종 답은 도구 목록이 아니라 증거 사슬이어야 한다. 단서가 부족하면 빈칸을 추측으로 메우지 않는 것이 OSINT의 정확성이다.