s2n 웹 스캐너 개발 - 0

HoHk☔️🐁·2026년 2월 11일

s2n

목록 보기
1/3

s2n 기반 정적 분석 + 서비스 취약점 연계 스캐너 설계 정리

3줄 요약

  1. 기존 s2n 구조는 플러그인 확장에 최적화된 구조다.
  2. 정적 분석 + 포트 서비스 버전 분석 + CVE 연계가 핵심 차별점이다.
  3. 단순 스캐너가 아니라 보안 분석 도우미로 확장하는 게 목표다.

시작하며

요즘 보안 스캐너들 보면 기능은 많은데 정작 왜 취약한지 설명이 빈약하다.
그래서 아예 처음부터 생각을 바꿨다.

“이 포트에서 이 서비스가 이 버전으로 돌아가고 있고,
이 코드 구조라서 이 취약점이 가능하다”
여기까지 한 번에 보여주면 어떨까 싶었다.

이 문서는 그 고민을 정리한 설계 문서다.


전체 구조 개요

이 프로젝트의 방향성은 다음과 같다.

[Target]
   |
   v
[Port Scan]
   |
   v
[Service Fingerprinting]
   |
   v
[Static Analysis]
   |
   v
[CVE / Vulnerability DB Matching]
   |
   v
[Why 취약한지 + 방어 방법 리포트]

핵심은 각 단계가 느슨하게 결합된 플러그인 구조라는 점이다.
그래서 기능 추가가 부담이 없다.


1. 정적 분석 기능이 필요한 이유

동적 스캐닝만으로는 한계가 명확하다.

구분한계
포트 스캔열려 있다는 것만 알 수 있다
배너 그랩정확한 내부 로직은 알 수 없다
동적 테스트조건부 취약점 탐지가 어렵다

그래서 정적 분석을 붙이려는 거다.

정적 분석은 다음을 가능하게 한다.

  • 코드 흐름 파악
  • 위험한 함수 사용 여부 확인
  • 설정 파일 기반 취약점 탐지

즉, 왜 가능한지를 설명할 수 있다.


2. GitHub 코드 구조 분석 방식

이 프로젝트는 GitHub 레포를 직접 분석 대상으로 삼는다.

분석 포인트

  • 디렉터리 구조
  • 프레임워크 추정
  • 언어별 위험 함수 패턴

예시 구조 판단

/src
 ├── controllers
 ├── routes
 ├── services
 └── config

이 구조라면 MVC 패턴 기반 웹 서비스라고 판단할 수 있다.
그 다음부터는 프레임워크별 룰을 적용한다.


3. 플러그인 방식 설계

기본 철학은 이거다.

기능 추가 = 플러그인 하나 추가

플러그인 인터페이스 예시

class PluginBase:
    name = "base"

    def match(self, context):
        return False

    def analyze(self, context):
        return []

각 플러그인은

  • 언제 실행될지
  • 무엇을 검사할지
  • 무엇을 리턴할지

이 세 가지만 신경 쓰면 된다.


4. 포트 서비스 + 버전 분석

포트는 그냥 숫자가 아니다.
서비스 + 버전 정보가 진짜 핵심이다.

예시:

80/tcp  -> nginx 1.18.0
3306/tcp -> MySQL 5.7

이 정보가 있으면 바로 다음 단계로 간다.


5. CVE DB 연계 방식

데이터 소스

  • NVD (JSON)
  • Exploit-DB
  • GitHub Advisory

저장 구조 예시

필드설명
cve_idCVE-2023-xxxx
productnginx
version< 1.20
severityHIGH
description취약점 설명
mitigation방어 방법

주기적으로 업데이트되도록 크론 잡으로 동기화한다.


6. 왜 취약한지 설명하는 리포트

이 프로젝트의 가장 중요한 부분이다.

출력 예시

  • 현재 서비스: nginx 1.18.0
  • 해당 버전 취약점: CVE-2021-23017
  • 원인: 특정 요청 처리 로직에서 버퍼 검증 미흡
  • 공격 가능성: RCE 가능
  • 방어 방법:
    • nginx 업그레이드
    • request size 제한 설정

단순 경고가 아니라 이해 가능한 설명을 목표로 한다.


7. 차별점 정리

항목기존 스캐너본 프로젝트
정적 분석거의 없음있음
CVE 설명링크만 제공원인 설명
방어 가이드단순설정 단위
확장성제한적플러그인 기반

마치며

아직 완성된 도구는 아니다.
솔직히 말하면 기능도 부족하다.

하지만 방향성은 명확하다.
단순히 “취약하다”를 말하는 도구가 아니라
“왜 취약한지 이해시키는 도구”를 만들고 싶다.

앞으로는

  • 탐지 정확도 개선
  • 더 많은 언어 지원
  • 정적 분석 룰 고도화

이런 방향으로 계속 발전시킬 생각이다.
갈 길은 멀지만, 이 구조라면 충분히 확장 가능하다고 본다.

profile
nyo님 좋아합니다!

0개의 댓글