
펜테스트 스크린샷 분석을 위한 합성곱 신경망

당신의 스크린샷을 빠르게 훑어보세요.
Eyeballer는 대규모 네트워크 침투 테스트에서 웹 기반 호스트의 거대한 세트 중에서 "흥미로운" 대상을 찾아야 할 때 유용합니다. 평소처럼 좋아하는 스크린샷 도구(EyeWitness 또는 GoWitness)를 사용하여 스크린샷을 찍은 다음, Eyeballer를 통해 실행하면 취약점이 포함될 가능성이 있는 것과 그렇지 않은 것을 알려줍니다.
라이브로 사용해 보세요: https://eyeballer.bishopfox.com
| 오래된 사이트 | 로그인 페이지 |
|---|---|
![]() | ![]() |
| 웹앱 | 사용자 정의 404 페이지 |
|---|---|
![]() | ![]() |
| 파킹된 도메인 |
|---|
![]() |
오래된 사이트 블록 형태의 프레임, 깨진 CSS, 2000년대 초반에 디자인된 듯한 웹사이트의 그 특유의 "느낌". 보면 압니다. 오래된 웹사이트는 단지 보기 흉할 뿐만 아니라 일반적으로 매우 취약합니다. 해킹 대상을 찾을 때 이 웹사이트들은 금광입니다.
로그인 페이지 로그인 페이지는 침투 테스트에 가치가 있습니다. 현재 접근할 수 없는 추가 기능이 있음을 나타냅니다. 또한 자격 증명 열거 공격이라는 간단한 후속 절차가 있다는 의미이기도 합니다. 로그인 페이지를 찾기 위해 간단한 휴리스틱을 설정할 수 있다고 생각할 수 있지만, 실제로는 매우 어렵습니다. 현대 사이트에서는 우리가 grep 할 수 있는 단순한 입력 태그를 사용하지 않습니다.
웹앱 이는 여기에 공격 표면 역할을 할 수 있는 더 큰 페이지 및 기능 그룹이 있음을 알려줍니다. 이는 다른 기능이 없는 단순한 로그인 페이지나 다른 기능이 없는 기본 IIS 랜딩 페이지와 대조적입니다. 이 레이블은 공격할 웹 애플리케이션이 있음을 나타냅니다.
사용자 정의 404 현대 사이트는 고장난 로봇이나 슬픈 개 사진이 있는 귀여운 사용자 정의 404 페이지를 좋아합니다. 불행히도, 그들은 또한 HTTP 200 응답 코드를 반환하는 것을 좋아합니다. 더 자주, "404" 페이지에는 "404"라는 텍조차 포함되어 있지 않습니다. 이러한 페이지는 시각적으로 많은 것이 있음에도 불구하고 일반적으로 흥미롭지 않으며, Eyeballer가 이를 걸러내는 데 도움을 줄 수 있습니다.
파킹된 도메인 파킹된 도메인은 실제처럼 보이지만 유효한 공격 표면이 아닌 웹사이트입니다. 이는 자리 표시자 페이지로, 일반적으로 실제 기능이 없으며 거의 전적으로 광고로 구성되어 있고, 일반적으로 실제 대상이 운영하지 않습니다. 이는 지정된 도메인이 잘못되었거나 만료된 경우 발생합니다. 이러한 페이지를 찾아 범위에서 제거하는 것은 시간이 지남에 따라 매우 가치 있습니다.
pip에서 필요한 패키지 다운로드:
sudo pip3 install -r requirements.txt
GPU 지원을 원하는 경우:
sudo pip3 install -r requirements-gpu.txt
참고: TensorFlow와 함께 GPU를 설정하는 것은 이 README의 범위를 훨씬 벗어납니다. 하드웨어 호환성 고려 사항, 설치해야 할 드라이버 등등... 할 것이 많습니다. 따라서 GPU를 원한다면 이 부분은 스스로 해결해야 합니다. 그러나 적어도 Python 패키지 관점에서는 위의 requirements 파일이 커버해 줍니다.
사전 훈련된 가중치
최신 사전 훈련된 가중치는 GitHub의 릴리스에서 확인하세요.
훈련 데이터 훈련 데이터는 여기에서 찾을 수 있습니다:
https://www.kaggle.com/altf42600/pentest-screensots
훈련 데이터에서 필요한 두 가지:
images/ 폴더labels.csv둘 다 Eyeballer 코드 트리의 루트에 복사하세요.
또한, 훈련 없이 바로 사용할 수 있는 사전 훈련된 가중치 파일도 찾을 수 있습니다.
bishop-fox-pretrained-vN.h5GitHub의 releases 섹션에서 최신 버전을 확인하세요.
참고: 최상의 결과를 얻으려면 웹사이트를 기본 1.6x 화면 비율(예: 1440x900)로 스크린샷하세요. Eyeballer가 이미지를 자동으로 올바른 크기로 조정하지만, 화면 비율이 맞지 않으면 예측 성능에 영향을 미치는 방식으로 이미지가 찌그러집니다.
일부 스크린샷을 훑어보려면 "predict" 모드를 실행하세요:
eyeballer.py --weights YOUR_WEIGHTS.h5 predict YOUR_FILE.png
또는 전체 디렉터리의 파일에 대해:
eyeballer.py --weights YOUR_WEIGHTS.h5 predict PATH_TO/YOUR_FILES/
Eyeballer는 결과를 사람이 읽을 수 있는 형식(results.html 파일로 쉽게 탐색 가능)과 기계가 읽을 수 있는 형식(results.csv 파일)으로 출력합니다.
Eyeballer의 성능은 전체 스크린샷 중 무작위로 선택된 20%의 평가 데이터 세트를 기준으로 측정됩니다. 이러한 스크린샷은 훈련에 사용되지 않으므로 모델의 성능을 효과적으로 확인할 수 있습니다. 다음은 최신 결과입니다:
| 전체 이진 정확도 | 93.52% |
|---|---|
| 올바른지 여부(All-or-Nothing) 정확도 | 76.09% |
전체 이진 정확도는 아마도 모델의 "정확도"라고 생각하는 것일 것입니다. 주어진 단일 레이블이 올바를 확률입니다.
올바른지 여부(All-or-Nothing) 정확도는 더 엄격합니다. 이미지의 모든 레이블을 고려하여 하나라도 틀리면 실패로 간주합니다. 이 정확도는 모델이 주어진 이미지에 대해 모든 레이블을 올바르게 예측할 확률입니다.
정밀도(Precision)와 재현율(Recall)에 대한 자세한 설명은 Wikipedia를 확인하세요.
새 모델을 훈련하려면 다음을 실행하세요:
eyeballer.py train
합리적인 시간 내에 실행하려면 좋은 GPU가 장착된 시스템이 필요합니다. 그러나 그 설정은 이 README의 범위를 벗어납니다.
그러면 새 모델 파일(기본적으로 weights.h5)이 출력됩니다.
방금 새 모델을 훈련했습니다. 좋습니다! 다양한 지표에 대해 이전에 본 적 없는 이미지에 대해 얼마나 잘 수행하는지 확인해 보겠습니다:
eyeballer.py --weights YOUR_WEIGHTS.h5 evaluate
출력은 프로그램의 각 레이블(의사 레이블인 "none of the above" 포함)에 대한 재현율과 정밀도 모두에서 모델의 정확도를 설명합니다.
| 레이블 | 정밀도(Precision) | 재현율(Recall) |
|---|
| 사용자 정의 404 | 80.20% | 91.01% |
| 로그인 페이지 | 86.41% | 88.47% |
| 웹앱 | 95.32% | 96.83% |
| 오래된 사이트 | 91.70% | 62.20% |
| 파킹된 도메인 | 70.99% | 66.43% |