Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
prescryb — CVE/구성 교정 오케스트레이션을 위한 MCP 서버: SSH 인벤토리, OSV/NVD 조회, CIS/DISA STIG 매핑 Ansible 플레이북 제안. | Kitploit
도구/GitHubGitHub/konstruktoid/prescryb
Defensive ToolsVulnerability AnalysisConfiguration AuditingInformation GatheringDevSecOpsThreat IntelligenceAI Security
GitHubkonstruktoid/prescryb

prescryb

CVE/구성 교정 오케스트레이션을 위한 MCP 서버: SSH 인벤토리, OSV/NVD 조회, CIS/DISA STIG 매핑 Ansible 플레이북 제안.

저장소 보기
1281일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

prescryb - 교정 오케스트레이터

동작 변경을 수행하기 전에 저장소의 목적, 구성 요소, 범위에 대한 개략적인 설명은 OVERVIEW.md를 참조하십시오.

MCP 서버로 노출되는 교정 오케스트레이터입니다. MCP 클라이언트(Claude Desktop, Claude Code 또는 유사한 것)를 연결하고 자연어 요청을 제출하십시오. 예를 들면 다음과 같습니다:

호스트 a.b.c에 로그인하여 설치된 패키지를 확인하고, CVE를 찾아 수정 사항을 제안하십시오 - 가능하면 Ansible로, 그리고 어떤 컴플라이언스 제어 항목에 매핑되는지 알려주십시오.

prescryb는 기본 요소(SSH 인벤토리, CVE 매칭, 실시간 권고 조회, 컴플라이언스 주제 매핑, Ansible 플레이북 렌더링)를 제공합니다. 연결된 모델이 추론을 수행합니다: 어떤 발견 사항이 중요한지, 어떤 CVE를 파고들어야 하는지, 어떤 플레이북을 생성해야 하는지. prescryb는 대상 호스트에 아무것도 적용하지 않습니다 - 모든 도구는 대상 호스트에 대해 읽기 전용이거나 순수한 텍스트/데이터 생성입니다.

작동 방식

도구수행 작업
inventory_host(host, user="", port=22, hostname="", identity_file="", trust_unknown_host=False)SSH로 접속하여 배포판을 감지하고, 버전과 함께 설치된 패키지를 나열합니다.
check_cves(system, packages)생태계를 인식하는 버전 비교(이름만 일치시키는 방식이 아님)를 사용하여 패키지 버전을 OSV.dev와 일괄 매칭합니다. 각 매치는 EPSS 악용 확률 점수로 보강됩니다.
fetch_advisory(cve_id)하나의 CVE에 대한 현재 NVD 레코드 - 설명, CVSS, CWE, 참조 - 를 학습 데이터가 아닌 실시간으로 가져옵니다.
fetch_epss(cve_ids)check_cves에서 아직 다루지 않은 CVE ID(예: fetch_advisory 또는 웹 검색에서 얻은 것)에 대한 EPSS 악용 확률 점수를 일괄 가져옵니다.
map_compliance(area)자유 텍스트 주제("ssh", "sudo", "kernel modules", ...)를 CIS/DISA STIG 주제 영역에 매핑하고, konstruktoid.hardening GitHub 저장소에 존재하는 경우 일치하는 역할 - 그리고 해당 영역이 다루는 MITRE ATT&CK 기법 및 완화 조치 - 에 매핑합니다.
lookup_cce(target, keyword, cce_id)플랫폼(예: "rhel8")에 대한 NIST CCE(Common Configuration Enumeration) 항목을 조회하며, konstruktoid/cce-web의 커뮤니티 JSON 변환에서 가져옵니다.
list_cce_targets()lookup_cce가 쿼리할 수 있는 모든 플랫폼을 나열합니다.
list_local_docs()로컬의 gitignore된 LOCAL_DOCS_DIR 아래에서 발견된 문서(Markdown/텍스트/PDF)를 나열합니다.
search_local_docs(query, top_k=5)해당 로컬 문서에 대한 RAG 스타일 시맨틱 검색으로, 전적으로 온머신에서 임베딩됩니다.
generate_playbook(system, cve_matches, compliance_areas, hosts_alias)제안 전용 Ansible 플레이북을 렌더링합니다: CVE 수정은 패키지 업그레이드 작업이 되고, 컴플라이언스 영역은 roles: 참조가 됩니다.

일반적인 흐름: inventory_host, 그다음 반환된 패키지에 대해 check_cves, 그다음 선택적으로 흥미로운 CVE에 대해 fetch_advisory, 그다음 발견된 안전하지 않은 구성 영역에 대해 map_compliance(및 lookup_cce), 그다음 선택적으로 관련 내부 런북/정책 컨텍스트에 대해 search_local_docs, 그다음 검토할 무언가를 생성하기 위해 generate_playbook.

flowchart TD
    U["Operator: natural-language request"] --> M["Connected model\n(Claude Desktop / Claude Code)"]
    M --> A["inventory_host\nSSH in, list packages"]
    A --> B["check_cves\nOSV.dev match + EPSS score"]
    B --> C{"Interesting\nCVE?"}
    C -->|yes| D["fetch_advisory\nNVD detail for one CVE"]
    C -->|no| E
    D --> E["map_compliance / lookup_cce\nCIS/DISA STIG + ATT&CK mapping"]
    E --> F["search_local_docs\ninternal runbooks (optional)"]
    F --> G["generate_playbook\nsuggest-only Ansible playbook"]
    G --> H["Model reasons over the results\nand presents findings + playbook"]
    H --> R["Operator reviews\n(ansible-playbook --check --diff)\nand applies manually"]

    style R fill:#f9f,stroke:#333,stroke-width:1px

prescryb인 도구 상자는 inventory_host, check_cves, fetch_advisory, map_compliance/lookup_cce, search_local_docs, generate_playbook뿐이며, 각각 읽기 전용 조회 또는 순수 텍스트/데이터 생성 호출입니다. 운영자와 연결된 모델은 prescryb의 일부가 아니며, 이 체인에서 inventory_host의 읽기 전용 SSH 세션 외에는 대상 호스트에 아무것도 접촉하지 않습니다. 생성된 플레이북 적용은 운영자가 prescryb 외부에서 수행하는 의도적이고 별개의 단계입니다.

설치

uv sync

MCP 클라이언트로 등록하기

Claude Code:

claude mcp add prescryb -- uv --directory /path/to/prescryb run prescryb

Claude Desktop(claude_desktop_config.json):

{
  "mcpServers": {
    "prescryb": {
      "command": "uv",
      "args": ["--directory", "/path/to/prescryb", "run", "prescryb"]
    }
  }
}

SSH 인증 모델

inventory_host는 비밀번호 인자를 절대 받지 않습니다. MCP 도구 호출 인자는 클라이언트에 의해 로깅될 수 있고 연결된 모델에 표시되므로, 자격 증명은 절대 이를 통해 전달되어서는 안 됩니다. 인증은 직접 ssh host를 실행하는 것과 정확히 동일하게 동작합니다:

  • 호스트/사용자/포트/identity 파일은 ~/.ssh/config에서 확인됩니다.
  • 키는 SSH 에이전트 또는 기본 identity 파일에서 가져옵니다.
  • inventory_host의 hostname/identity_file 인자는 확인된 주소/키 경로를 직접 재정의하며, ~/.ssh/config에 추가하고 싶지 않은 호스트에 사용합니다(경로만 전달되며 키 내용은 절대 전달되지 않습니다).
  • 알 수 없는 호스트 키는 거부됩니다. 단, trust_unknown_host=True를 전달하지 않는 한 그렇습니다
    • 대신 키를 고정하기 위해 ssh host를 수동으로 한 번 실행하는 것을 권장합니다.

예시: 저장소 QEMU VM에 대해 claude 실행하기

qemu/vm.sh는 cloud-init 시드와 127.0.0.1의 SSH 포트 포워딩(2201, 2202, 2203)을 사용하여 QEMU에서 클라우드 이미지(almalinux10, trixie, resolute)를 부팅합니다. qemu-system-x86_64, qemu-img, cloud-localds(cloud-image-utils), curl, ssh가 필요하며, /dev/kvm이 쓰기 가능할 때 KVM이 사용됩니다. 이미지는 체크섬으로 검증되며 qemu/.state/에 캐시됩니다.

qemu/vm.sh up trixie
qemu/vm.sh ssh trixie true   # retry until the guest answers
claude 'inventory 127.0.0.1 port 2202 user prescryb with identity file
qemu/.state/id_ed25519 (trust_unknown_host is fine, it is a throwaway VM),
check any vulnerabilities and suggest a fix, include compliance mapping if
possible, write the playbook suggestion to /tmp/ and print the file location'
qemu/vm.sh destroy trixie

예시: 일반 호스트 확인

ssh를 통해 이미 접근 가능한 호스트(~/.ssh/config, 에이전트 키 또는 기본 identity 파일을 통해 확인됨)의 경우 호스트 이름을 직접 지정하세요. 포트나 identity 파일 구성은 필요하지 않습니다:

인벤토리 prod-web-01, 설치된 패키지 확인, CVE 찾기, 수정 제안 - 가능하면 Ansible로, 그리고 어떤 컴플라이언스 제어 항목에 매핑되는지 알려줘.

호스트가 아직 ~/.ssh/config에 없다면, Host 블록을 추가하거나 일회성 연결을 위해 user/port/hostname/identity_file을 inventory_host에 직접 전달하세요 - 아래 molecule 예시와 동일합니다.

예시: molecule 테스트 인스턴스 검사

molecule converge -s default

해당 시나리오의 molecule.yml 플랫폼 항목에서 ssh_port/ssh_user를 찾고(예: almalinux10 플랫폼의 경우 ssh_port: 22201, ssh_user: almalinux), molecule login이 연결에 사용하는 개인 키를 확인한 뒤 - ~/.ssh/config에 Host 블록을 추가하거나, 파일을 완전히 건너뛰고 일회성 임시 연결을 위해 inventory_host에 직접 전달하세요:

인벤토리 127.0.0.1, 포트 22201, 사용자 almalinux, identity_file /path/to/molecule's/generated/key, 설치된 패키지 확인, CVE 찾기, 수정 제안 - 가능하면 Ansible로, 그리고 어떤 컴플라이언스 제어 항목에 매핑되는지 알려줘.

완료 후 molecule destroy -s default를 실행하세요. prescryb는 이를 대신 수행하지 않으며, 인스턴스를 읽는 것 외에는 건드리지 않습니다.

컴플라이언스 매핑

map_compliance는 주제 영역(예: "SSH Server Configuration")을 지정하며, konstruktoid/ansible-collection-hardening GitHub 저장소에서 발견되면 이를 구현하는 Ansible 역할에 대한 링크도 함께 제공합니다.

기본적으로 konstruktoid/ansible-collection-hardening에 대해 GitHub API를 쿼리합니다. 다음으로 재정의할 수 있습니다:

export HARDENING_COLLECTION_REPO=owner/repo

GITHUB_TOKEN을 설정하면 (그렇지 않으면 낮은) 인증되지 않은 GitHub API 속도 제한을 높일 수 있습니다. 저장소에서 역할을 찾지 못하더라도 map_compliance는 여전히 주제/프레임워크/역할 이름을 반환하므로 무엇을 설치해야 하는지 알 수 있습니다 (ansible-galaxy collection install konstruktoid.hardening).

CCE 조회

lookup_cce는 NIST Common Configuration Enumeration 항목을 조회합니다. 이는 개별 구성 검사에 대한 고유 식별자로, 위의 주제 영역 CIS/DISA STIG 매핑과는 다릅니다. NIST는 CCE를 스프레드시트로만 게시하므로, 이 도구는 Excel을 파싱하는 대신 커뮤니티 프로젝트 konstruktoid/cce-web에서 호스팅하는 사전 변환된 JSON 내보내기를 읽습니다.

커버리지는 주제별이 아니라 플랫폼별이며, 이 프로젝트의 대상 배포판에 대해서는 적습니다. RHEL 계열(rhel6/rhel7/rhel8 - AlmaLinux/Rocky는 대응하는 업스트림 RHEL 번호를 사용)과 SUSE(SLES12-DISA-STIG/SLES15-DISA-STIG/SLES15-PCI-DSS)만 사용 가능한 데이터가 있습니다. Debian, Ubuntu, Alpine, Arch는 업스트림에 CCE 데이터가 전혀 없습니다. 일부 오래된 cce-web 내보내기(예: rhel4, rhel5, apache-httpd2.2)는 업스트림의 Excel-to-JSON 변환 과정에서 열 헤더를 잃어버렸으며, 이러한 항목은 깨진 필드를 반환하는 대신 지원되지 않는 것으로 보고됩니다. list_cce_targets를 호출하면 비 Linux 플랫폼(firefox, win2k8r2, ...)을 포함한 모든 게시된 플랫폼을 볼 수 있습니다.

소스 저장소를 다음으로 재정의하십시오:

export CCE_REPO=owner/repo

MITRE ATT&CK 매핑

도구 다운로드