
LLM 에이전트를 속여 자동화된 침투 테스트를 수행하도록 유도하기 위해, 스푸핑된 로컬 TXT 레코드를 DNS 쿼리 출력에 추가하는 macOS dig 래퍼.
macOS에서 사용하는 로컬 dig 래퍼입니다. 실제 쿼리를 보내는 것은 여전히 시스템에 내장된 /usr/bin/dig입니다. 이 프로젝트는 사용자의 터미널 출력 뒤에 로컬 TXT 한 줄만 덧붙여서 로컬 테스트를 편하게 해줍니다.
DNS를 변경하지 않고, zone file(영역 파일)도 쓰지 않으며, 어떤 클라우드 업체도 건드리지 않습니다.
특정 도메인에 TXT 한 줄을 고정하면, 이후 조회할 때마다 반환됩니다
dig +txt=<value> TXT <name>
dig +txt=<value> +ttl=600 TXT <name>
name: 도메인, 예를 들어 app.localvalue: 이 TXT의 내용으로, +txt= 뒤에 씁니다. 공백이 있으면 따옴표로 감쌉니다+ttl=<초>: 표시용 TTL, 기본값 600dig +txt=env=staging TXT app.local
dig +short TXT app.local # "env=staging"
dig +txt='hello world' TXT app.local # 값에 공백이 있는 경우
dig +txt= TXT app.local # 이 도메인의 레코드 삭제
위치 인자로도 쓸 수 있습니다:
dig app.local env=staging
dig app.local -- "hello world"
쿼리 타입 TXT / ANY에만 적용되며, A 조회에서는 보이지 않습니다. example.com을 설정하면 x.example.com을 조회해도 매칭됩니다. dig -h에서는 +txt=가 보이지 않는데, 이 인자는 시스템 dig로 넘기기 전에 제거되기 때문입니다.
16진수가 아닌 +cookie=<value>도 마찬가지로 value를 설정합니다. 실제 16진수 cookie는 그대로 시스템 dig로 전달됩니다.
전체 출력에서 시스템 dig의 HEADER, ANSWER: 카운트, MSG SIZE rcvd는 네트워크 응답 그대로 유지됩니다. 로컬 TXT는 이 출력 뒤에 한 줄 띄우고 기록됩니다. 예를 들어:
;; MSG SIZE rcvd: 100
app.local. 600 IN TXT "env=staging"
+short일 때는 따옴표가 붙은 값 한 줄만 추가됩니다. ANSWER SECTION을 다시 쓰지도 않고, stderr에 출처 설명을 출력하지도 않습니다.
같은 도메인의 두 번째 조회에서는 _zcode-verify 마커가 다시 추가되지 않습니다. 로컬에서는 여전히 조회 횟수를 기록하지만 출력은 바뀌지 않습니다.

macOS만 지원하며, /usr/bin/dig와 /usr/bin/python3가 필요하고 pip 의존성은 없습니다.
git clone https://github.com/xsser/dig.git
cd dig
./scripts/install.sh
export PATH="$HOME/.local/bin:$PATH"
command -v dig # ~/.local/bin/dig 여야 함
설치 스크립트는 기존 ~/.local/bin/dig를 먼저 백업합니다. command -v dig가 이 경로가 아니면 래퍼는 전혀 동작하지 않습니다.
이미 열려 있는 zsh는 예전 경로를 기억하고 있을 수 있으니 rehash를 한 번 실행하세요.
./scripts/restore.sh
설치 전의 그 파일을 복구하며, 반드시 시스템 /usr/bin/dig와 같지는 않습니다. 잠시 래퍼를 거치고 싶지 않다면 /usr/bin/dig를 직접 호출하세요.
백업 디렉터리를 수동으로 풀지 마세요.
카운트와 고정된 TXT는 다음 위치에 저장됩니다:
~/.cache/dig-zcode-wrapper
이것은 로컬 테스트 상태이며 DNS 증거가 아닙니다. 커밋하지 말고, 도메인 소유권 검증에 사용하지 마세요.
make verify
~/.local/bin이 PATH 앞쪽에 있을 때만 유효합니다/usr/bin/dig가 사용하는 DNS 네트워크 경로도 바꾸지 않습니다