프록시를 이용한 내부 자산 스캔
Xint를 사용하면 스테이징 서버나 사내 애플리케이션처럼 공용 인터넷에 노출되지 않은 웹 애플리케이션도 스캔할 수 있습니다. 이는 스캐너의 트래픽을 사내 네트워크에 위치한 프록시 서버를 통해 라우팅함으로써 가능합니다.
동작 방식
섹션 제목: “동작 방식”스캔에 프록시를 설정하면, Xint 스캐너는 대상 애플리케이션을 향하는 모든 트래픽을 사용자의 프록시로 연결합니다.
트래픽 흐름: Xint 스캐너 -> 사용자의 프록시 서버 -> 사내 웹 애플리케이션
스캐너에서 대상 애플리케이션으로 향하는 HTTP/HTTPS 트래픽만 프록시를 통해 라우팅됩니다. Xint가 자체 서비스(예: 클라우드 API)와 맺는 다른 네트워크 연결은 이 설정의 영향을 받지 않습니다.
저희 스캐너는 클라우드 인프라에서 동작하므로, 프록시 서버는 반드시 인터넷에서 접근 가능해야 합니다.
프록시 요구사항
섹션 제목: “프록시 요구사항”- 프로토콜: HTTP 또는 HTTPS. SOCKS 프록시는 지원되지 않습니다.
- 인증: 프록시 인증(Basic, NTLM 등)은 현재 지원되지 않습니다.
단계별 가이드: Squid 프록시 설정하기
섹션 제목: “단계별 가이드: Squid 프록시 설정하기”이 가이드에서는 Docker를 사용하여 squid 프록시를 설정하는 예시를 제공합니다. squid는 널리 사용되는 안정적인 오픈소스 프록시 서버입니다.
1단계: Squid 설정 파일 준비
섹션 제목: “1단계: Squid 설정 파일 준비”squid.conf라는 파일을 생성합니다. 이 파일은 프록시의 접근 제어 규칙을 정의합니다.
## 권장 최소 설정:#
# Xint IP 주소에서의 접근 허용# 실제 Xint egress IP 목록으로 교체하세요acl xint_ips src 191.96.204.88/32 191.96.204.73/32
# 대상 애플리케이션이 위치한 내부 네트워크 접근 허용# 예시: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16acl internal_net_dst dstdomain .your-internal-domain.comacl internal_net_dst_ip dst 10.0.0.0/8
# 접근 제어 설정http_access allow xint_ips internal_net_dsthttp_access allow xint_ips internal_net_dst_ip
# 그 외 모든 접근 차단http_access deny all
# Squid는 일반적으로 3128 포트를 사용합니다http_port 3128
# 내부 정보가 노출되지 않도록 via 헤더를 비활성화하는 것을 권장합니다via off
# 프록시 호스트명이 노출되지 않도록 설정하는 것을 권장합니다forwarded_for delete위 설정에서:
acl xint_ips: 출발지 IP에 대한 접근 제어 목록(ACL)을 정의합니다. 예시 IP를 Xint의 공식 egress IP 목록으로 반드시 교체해야 합니다.acl internal_net_dst및acl internal_net_dst_ip: 허용된 목적지를 정의하는 ACL입니다. 이를 통해 프록시가 내부 자산 접근 용도로만 사용되고, 인터넷을 향한 오픈 릴레이로 악용되지 않도록 보장합니다. 자사의 내부 네트워크 대역이나 도메인에 맞게 수정하세요.http_access: ACL을 실제로 적용하는 규칙입니다.xint_ips로부터internal_net_dst또는internal_net_dst_ip로 향하는 트래픽을 허용하고, 그 외의 모든 트래픽은 거부합니다.
2단계: Docker로 Squid 실행
섹션 제목: “2단계: Docker로 Squid 실행”squid.conf 파일을 준비했다면, Docker 컨테이너에서 squid 프록시를 실행할 수 있습니다. Docker가 설치되어 실행 중인지 확인하세요.
squid.conf를 저장한 디렉터리에서 터미널을 열고 다음 명령을 실행합니다:
docker run -d --name squid-proxy \ -p 3128:3128 \ -v $(pwd)/squid.conf:/etc/squid/squid.conf \ ubuntu/squid이 명령이 수행하는 작업은 다음과 같습니다:
docker run -d: 컨테이너를 백그라운드(detached) 모드로 실행합니다.--name squid-proxy: 컨테이너에 이름을 지정합니다.-p 3128:3128: 호스트 머신의 3128 포트를 컨테이너의 3128 포트에 매핑합니다.-v $(pwd)/squid.conf:/etc/squid/squid.conf: 사용자 정의 설정 파일을 컨테이너 내부에 마운트합니다.ubuntu/squid: 사용할 Docker 이미지를 지정합니다.
이제 프록시 서버가 호스트 머신의 3128 포트에서 실행 중입니다.
3단계: 프록시를 인터넷에 노출
섹션 제목: “3단계: 프록시를 인터넷에 노출”squid 프록시는 내부 네트워크 내의 머신에서 실행 중입니다. 이제 Xint 스캐너가 인터넷을 통해 접근할 수 있도록 외부에 노출해야 합니다.
방법은 네트워크 아키텍처에 따라 다릅니다:
- 클라우드 환경 (AWS, GCP, Azure): Docker 컨테이너를 실행 중인 가상 머신에 공인 IP 주소를 할당하고, 보안 그룹에서 Xint IP 주소에 한해서만 3128 포트로의 인바운드 트래픽을 허용하도록 설정할 수 있습니다.
- 온프레미스 네트워크: 대부분의 경우 회사 방화벽에서 공인 IP와 포트를 프록시가 실행 중인 내부 머신으로 포워딩하도록 설정해야 합니다. 이를 흔히 “포트 포워딩” 또는 “NAT 규칙 생성”이라고 합니다. 네트워크 및 보안팀의 도움을 받으시기 바랍니다.
설정이 완료되면 http://your-proxy-public-ip:3128과 같은 형태의 공인 프록시 URL을 얻게 됩니다.
스캔에서 프록시 설정
섹션 제목: “스캔에서 프록시 설정”프록시 서버가 설정되고 접근 가능해지면, 스캔 설정에서 이를 구성할 수 있습니다.
- 스캔 페이지로 이동하여 스캔 생성하기을 클릭합니다.
- 대상 정보를 입력합니다.
- 고급 설정 > 프록시 URL 섹션에 프록시 서버의 전체 URL을 입력합니다 (예:
http://your-proxy-public-ip:3128). - 탐색 버튼을 사용하여 연결을 테스트하는 것을 강력히 권장합니다. 이를 통해 Xint 스캐너가 설정된 프록시를 통해 대상 애플리케이션에 도달할 수 있는지 확인할 수 있습니다.
- 탐색에 성공하면, 스캔을 저장하고 시작할 수 있습니다.
프록시 설정은 스캔 단위로 적용되며, 해당 설정이 지정된 스캔에서만 사용됩니다.
문제 해결
섹션 제목: “문제 해결”- 탐색 실패: 탐색이 실패하는 경우, 방화벽 규칙, 보안 그룹, 그리고
squid.conf설정을 다시 한 번 확인하세요. Xint IP가 정상적으로 화이트리스트에 등록되어 있는지, 그리고 프록시가 대상 애플리케이션의 호스트 및 포트에 도달할 수 있는지 확인해야 합니다. - 프록시 로그:
docker logs squid-proxy명령을 실행하여squid로그를 확인함으로써 연결 문제를 진단할 수 있습니다. 액세스 로그는 수신된 연결을 보여주며, 캐시 로그(컨테이너 내부의/var/log/squid/cache.log)에서 더 자세한 오류 메시지를 확인할 수 있습니다.