Nikto 에서 User-Agent 문자열 스푸핑하기

Kali LinuxBeginner
지금 연습하기

소개

Nikto 는 인기 있는 오픈 소스 웹 서버 스캐너로, 6,700 개 이상의 잠재적으로 위험한 파일/프로그램, 1,250 개 이상의 서버의 최신 버전이 아닌 경우, 270 개 이상의 서버의 버전별 문제점을 포함한 다양한 항목에 대해 웹 서버를 포괄적으로 테스트합니다.

Nikto 가 대상 서버에 요청을 보낼 때, 기본 "User-Agent" 문자열을 사용하여 자신을 식별합니다. 이 문자열은 방화벽이나 침입 탐지 시스템에 의해 쉽게 감지될 수 있으며, 이로 인해 스캔이 차단될 수 있습니다. 더 은밀한 스캔을 수행하려면 일반 웹 브라우저를 모방하도록 User-Agent 를 "스푸핑 (spoof)"하거나 변경할 수 있습니다.

이 랩에서는 Nikto 의 기본 User-Agent 를 식별하는 방법을 배우고, 스캔을 덜 눈에 띄게 만들기 위해 -useragent 옵션을 사용하여 이를 변경하는 방법을 배웁니다.

테스트 스캔에서 기본 Nikto User-Agent 식별하기

이 단계에서는 로컬 웹 서버를 대상으로 기본 Nikto User-Agent 문자열을 확인하기 위해 기본적인 Nikto 스캔을 실행합니다. 백그라운드에서 간단한 Python 웹 서버가 시작되었으며, 이 서버는 모든 수신 요청을 access.log라는 파일에 기록합니다.

먼저, 포트 8000에서 실행 중인 로컬 서버를 대상으로 표준 Nikto 스캔을 실행합니다. 터미널을 열고 다음 명령을 실행합니다.

nikto -h http://localhost:8000

Nikto 는 일련의 테스트를 수행합니다. 스캔 결과 자체보다는 Nikto 가 생성하는 로그 항목에 관심이 있습니다.

스캔이 완료된 후, 로그 파일의 내용을 확인하여 서버가 Nikto 의 요청을 어떻게 기록했는지 확인합니다. cat 명령을 사용합니다.

cat ~/project/access.log

Nikto 의 기본 User-Agent 를 포함하는 로그 항목이 표시될 것입니다. 다음과 유사하게 보이며 스캐너를 명확하게 식별합니다.

127.0.0.1 - "GET / HTTP/1.1" Mozilla/5.0 (X11; Linux x86_64) Nikto/2.5.0 (Evasions:None) (Test:Port Check)
127.0.0.1 - "GET /icons/blank.gif HTTP/1.1" Mozilla/5.0 (X11; Linux x86_64) Nikto/2.5.0 (Evasions:None) (Test:Port Check)
... (other log entries) ...

문자열의 Nikto/2.5.0 부분을 주목하십시오. 이것이 다음 단계에서 숨기려는 서명입니다.

일반 브라우저 User-Agent 문자열을 선택하여 모방하기

이 단계에서는 일반 웹 브라우저의 User-Agent 문자열을 선택합니다. 목표는 스캔 트래픽이 자동화된 도구가 아닌 일반 사용자의 트래픽처럼 보이게 하는 것입니다. 이는 알려진 스캐너 User-Agent 를 기반으로 트래픽을 차단하는 간단한 탐지 규칙을 우회하는 데 도움이 됩니다.

온라인에는 현재 User-Agent 문자열을 찾을 수 있는 많은 자료가 있습니다. 이 랩에서는 Windows 컴퓨터의 Firefox 브라우저에 대한 일반적인 User-Agent 를 사용합니다.

사용할 문자열은 다음과 같습니다.
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0

이 단계는 순전히 정보 제공용입니다. 명령을 실행할 필요는 없습니다. 다음 단계에서 사용할 것이므로 위의 문자열에 익숙해지기만 하면 됩니다.

-useragent 옵션을 사용하여 새 문자열 설정하기

이 단계에서는 새로운 스푸핑된 User-Agent 를 사용하기 위해 Nikto 명령을 구성하는 방법을 배웁니다. Nikto 는 이 목적을 위해 특정 명령줄 옵션인 -useragent를 제공합니다.

이 옵션의 구문은 간단합니다. 명령에 -useragent를 추가하고, 사용하려는 새 문자열을 뒤따릅니다. User-Agent 문자열에는 공백과 특수 문자가 포함되어 있으므로 전체 문자열을 큰따옴표 (") 로 묶는 것이 중요합니다.

이전 단계에서 선택한 Firefox User-Agent 로 로컬 서버를 스캔하기 위해 명령을 구성하는 방법은 다음과 같습니다.

nikto -h http://localhost:8000 -useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"

이 단계에서는 명령이 어떻게 구성되는지만 이해하면 됩니다. 다음 단계에서 실행할 것입니다.

스푸핑된 User-Agent 로 스캔 실행하기

이 단계에서는 사용자 지정 User-Agent 를 사용하여 Nikto 스캔을 실행합니다. 새 스캔의 결과만 확인하려면 먼저 이전 로그 파일을 지우는 것이 좋습니다.

다음 명령으로 access.log 파일을 지웁니다.

> ~/project/access.log

이 명령은 파일을 덮어쓰므로 비어 있게 됩니다. 이제 -useragent 옵션과 Firefox 문자열을 사용하여 Nikto 스캔을 실행합니다.

nikto -h http://localhost:8000 -useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"

이제 Nikto 는 이전과 동일한 스캔을 실행하지만, 보내는 모든 요청은 기본 Nikto 대신 Firefox User-Agent 문자열을 전달합니다. 스캔이 완료될 때까지 실행되도록 둡니다.

서버 로그 또는 프록시에서 새 User-Agent 확인하기

마지막 단계에서는 User-Agent 스푸핑이 성공했는지 확인할 것입니다. 마지막 스캔 중에 기록된 User-Agent 를 확인하기 위해 서버의 로그 파일을 다시 확인할 것입니다.

cat 명령을 사용하여 access.log의 내용을 표시합니다.

cat ~/project/access.log

이번에는 출력이 다르게 보여야 합니다. 로그에서 "Nikto"를 보는 대신 지정한 Firefox User-Agent 문자열을 볼 수 있습니다.

127.0.0.1 - "GET / HTTP/1.1" Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0
127.0.0.1 - "GET /icons/blank.gif HTTP/1.1" Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0
... (다른 로그 항목) ...

보시다시피 로그에는 이제 표준 Firefox User-Agent 가 표시됩니다. "Nikto"라는 단어가 사라져 서버의 기본 로그에서 스캐너의 신원을 성공적으로 숨겼습니다.

요약

이 실습에서는 보안 스캔을 더욱 은밀하게 만드는 기본적인 기술을 배웠습니다. Nikto 에서 User-Agent 문자열을 스푸핑하여 일반 웹 브라우저를 모방하는 데 성공했습니다.

다음 내용을 배웠습니다.

  • 기준선을 설정하기 위해 기본 Nikto 스캔 실행하기
  • 서버 로그를 검사하여 기본 Nikto User-Agent 식별하기
  • -useragent 명령줄 옵션을 사용하여 사용자 지정 문자열 지정하기
  • 스푸핑된 User-Agent 로 새 스캔 실행하기
  • 서버 로그를 다시 확인하여 변경 사항 확인하기

이 기술은 취약점 평가를 보안 시스템에 즉시 차단되거나 탐지되지 않고 수행해야 하는 침투 테스터 및 보안 전문가에게 필수적입니다.