Nikto 에서 요청 타임아웃 설정하기

Kali LinuxBeginner
지금 연습하기

소개

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

웹 서버를 스캔할 때, 특히 느리거나 불안정한 네트워크에서 또는 부하가 많이 걸린 서버를 대상으로 할 때 요청이 완료되는 데 시간이 오래 걸릴 수 있습니다. 기본적으로 Nikto 는 응답을 기다리는 데 10 초를 사용합니다. 서버가 이보다 느리면 Nikto 는 타임아웃 오류를 보고하고 스캔을 제대로 완료하지 못할 수 있습니다.

이 실험실에서는 Nikto 의 -timeout 옵션을 사용하여 요청 타임아웃 기간을 제어하는 방법을 배우게 됩니다. 이를 통해 느리거나 응답이 없는 웹 서버를 성공적으로 스캔하도록 Nikto 의 동작을 조정할 수 있습니다.

느리거나 응답이 없는 웹 서버 식별하기

이 단계에서는 웹 서버가 느린지 식별하는 방법을 배우게 됩니다. 스캐닝 도구에서 타임아웃을 조정하기 전에 서버의 일반적인 응답 시간을 먼저 측정하는 것이 중요합니다. 이를 수행하는 간단한 방법은 curl 명령을 사용하는 것입니다.

의도적으로 느리게 작동하는 웹 서버를 백그라운드에서 시작했습니다. 이 서버는 응답을 보내기 전에 5 초를 기다립니다. curl을 사용하여 응답을 받는 데 걸리는 시간을 측정해 보겠습니다. -w 플래그를 사용하면 출력을 형식화할 수 있으며, %{time_total}은 트랜잭션의 총 시간을 보유하는 변수입니다.

포트 8000에서 실행 중인 로컬 서버의 응답 시간을 측정하려면 터미널에서 다음 명령을 실행하십시오.

curl -o /dev/null -s -w 'Total time: %{time_total}\n' http://localhost:8000

다음과 유사한 출력이 표시됩니다. 서버에 추가한 인위적인 지연으로 인해 시간은 5 초를 약간 초과할 것입니다.

Total time: 5.00...

이는 서버가 느리고 응답하는 데 몇 초 이상 걸린다는 것을 확인시켜 줍니다. 이 정보는 Nikto 에서 적절한 타임아웃을 설정하는 데 매우 중요합니다.

초 단위 짧은 타임아웃 설정을 위한 -timeout 옵션 사용하기

이 단계에서는 Nikto 의 -timeout 옵션에 대해 배우게 됩니다. 이 옵션을 사용하면 Nikto 가 포기하고 타임아웃으로 표시하기 전에 단일 요청이 완료될 때까지 기다릴 초 수를 지정할 수 있습니다. 기본값은 10 초입니다.

잘못 구성된 타임아웃으로 Nikto 가 어떻게 작동하는지 이해하기 위해 느린 서버에 대해 의도적으로 너무 짧은 값을 설정할 것입니다. 서버가 응답하는 데 약 5 초가 걸린다는 것을 알고 있으므로 타임아웃을 2 초로 설정할 것입니다. 이렇게 하면 스캔이 타임아웃 오류로 실패하게 되며, 이는 다음 단계에서 관찰할 것입니다.

먼저 Nikto 의 도움말 메뉴를 사용하여 -timeout 옵션의 존재와 설명을 확인해 보겠습니다. nikto -Help의 출력을 grep으로 파이프하여 특정 옵션을 찾을 수 있습니다.

nikto -Help | grep timeout

출력에는 -timeout 옵션과 해당 설명이 표시됩니다.

-timeout <secs>     Timeout for requests (default 10 seconds)

이는 옵션 사용 방법을 확인시켜 줍니다. 다음 단계에서는 실제 스캔에 적용할 것입니다.

스캔 실행 및 잠재적 타임아웃 오류 관찰하기

이 단계에서는 결정한 짧은 타임아웃 값으로 Nikto 스캔을 실행합니다. 이를 통해 타겟 서버에 대한 타임아웃이 충분하지 않을 때 어떤 일이 발생하는지 보여줄 것입니다.

2 초 타임아웃으로 로컬 서버를 스캔하려면 다음 명령을 실행하십시오. -h 플래그는 호스트를 지정하고 -p는 포트를 지정합니다.

nikto -h localhost -p 8000 -timeout 2

스캔이 실행되는 동안 콘솔에 여러 오류 메시지가 출력되는 것을 볼 수 있습니다. Nikto 는 요청을 시도하지만 서버가 응답하는 데 5 초가 걸리므로 2 초 타임아웃은 매번 초과됩니다.

출력은 다음과 유사한 오류로 채워질 것입니다.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: No banner retrieved
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ ERROR: Connection timed out
+ ERROR: Connection timed out
... (many more errors) ...

반복되는 ERROR: Connection timed out 메시지는 타임아웃 값이 너무 낮다는 명확한 신호입니다. 스캔 결과는 신뢰할 수 없으며 많은 테스트가 건너뛰어졌을 가능성이 높습니다.

더 안정적인 스캔을 위한 타임아웃 값 증가시키기

이 단계에서는 적절한 타임아웃 값을 설정하여 이전 단계의 문제를 해결합니다. 안정적인 스캔을 보장하려면 타임아웃이 서버의 가장 긴 예상 응답 시간보다 길어야 합니다.

1 단계의 curl 테스트에서 서버가 응답하는 데 약 5 초가 걸린다는 것을 알고 있습니다. 안전을 위해 약간의 버퍼를 추가해야 합니다. 타임아웃을 7 초로 설정해 보겠습니다. 이렇게 하면 서버가 요청을 처리하고 응답을 보내는 데 충분한 시간이 주어집니다.

이번에는 타임아웃을 7 초로 설정하여 Nikto 스캔을 다시 실행합니다.

nikto -h localhost -p 8000 -timeout 7

이번에는 다른 결과를 보게 될 것입니다. 스캔은 "Connection timed out" 오류 없이 진행될 것입니다. Nikto 는 이제 서버와 제대로 통신하고 테스트를 수행할 수 있습니다.

출력은 일반적인 성공적인 스캔과 더 유사하게 보일 것입니다.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: Python/3.10.6 http.server/0.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI directories found (use '-C all' to force check all possible dirs)
+ "robots.txt" not found.
...

타임아웃 오류가 없고 서버 배너가 표시되는 것을 확인하십시오. 이는 스캔이 이제 안정적으로 실행되고 있음을 나타냅니다.

타겟 네트워크에 대한 최적의 타임아웃 값 찾기

이 단계에서는 최적의 타임아웃 값을 찾기 위한 전략에 대해 논의할 것입니다. 제어된 환경에서 알려진 지연 시간을 사용했지만, 실제 시나리오에서는 정확한 응답 시간을 알 수 없을 것입니다.

최적의 타임아웃을 찾는 것은 균형입니다.

  • 너무 짧음: 타임아웃 오류와 신뢰할 수 없는 스캔으로 이어집니다 (3 단계에서 보았듯이).
  • 너무 김: 서버가 실제로 빠른 경우 스캔을 불필요하게 느리게 만들 수 있습니다. 예를 들어, 일반적으로 1 초 안에 응답하는 서버에 30 초 타임아웃을 설정하면 실제로 실패한 각 요청에 대해 30 초를 기다리게 되어 전체 스캔 속도가 느려집니다.

좋은 전략은 다음과 같습니다.

  1. ping 또는 curl을 사용하여 기준선 측정을 수행하여 일반적인 지연 시간을 파악합니다.
  2. 기준선 측정보다 몇 초 더 긴 타임아웃으로 시작합니다.
  3. 여전히 타임아웃 오류가 표시되면 스캔이 원활하게 실행될 때까지 값을 점진적으로 늘립니다.

저희 서버의 경우 7 초 타임아웃이 잘 작동했습니다. 이제 기본값인 10 초로 타임아웃을 약간 더 넉넉하게 설정하여 마지막 스캔을 한 번 더 실행하고, 스캔이 매우 큰 웹사이트에서 몇 시간 동안 실행되지 않도록 보장하는 데 유용한 -maxtime 옵션도 도입해 보겠습니다.

nikto -h localhost -p 8000 -timeout 10 -maxtime 60s

이 명령은 Nikto 에게 각 요청에 대해 최대 10 초를 기다리도록 지시하고 전체 스캔 시간이 60 초를 초과하면 전체 스캔을 중단하도록 합니다. 이 조합을 통해 개별 요청 타이밍과 전체 스캔 지속 시간을 모두 제어할 수 있습니다.

요약

이 실습에서는 신뢰할 수 있는 웹 취약점 스캔을 수행하는 데 중요한 기술인 Nikto 에서 요청 타임아웃을 효과적으로 관리하는 방법을 배웠습니다.

curl 명령을 사용하여 응답 시간을 측정하여 느린 웹 서버를 식별하는 것으로 시작했습니다. 그런 다음 Nikto 의 -timeout 옵션을 탐색했으며, 처음에는 너무 낮은 값으로 설정하여 연결 오류가 발생했습니다. 이후 타임아웃을 적절한 값으로 늘려 스캔이 성공적으로 완료되도록 했습니다.

마지막으로 스캔의 신뢰성과 효율성의 균형을 맞춰 최적의 타임아웃 값을 찾는 전략을 배웠고, 전체 스캔 지속 시간을 제어하기 위한 관련 -maxtime 옵션을 소개받았습니다. 이러한 설정을 올바르게 구성하면 Nikto 스캔이 철저하고 시기적절하게 수행됩니다.