보안 감사은(는) 무엇을 하나요?
실제 신뢰 경계를 위반하는 취약점을 찾고, 소유자에게 증거, 안전한 재현 방법, 우선순위, 가장 작은 효과적인 수정을 제시하십시오. 이는 방어적이고 소스 우선의 워크플로입니다. 구체적인 영향을 받는 주체, 리소스 또는 보안 결과가 없는 후보는 확인된 발견으로 간주되지 않습니다.
작동 모드
이 스킬은 기본적으로 지침 모드입니다. 로드해도 전체 감사 워크플로 또는 파일 생성을 승인하지 않습니다.
- 지침 모드: 보안 질문, 집중 검토, 방법론, 분류 또는 특정 발견 조사에 대해 이 스킬의 관련 부분만 사용합니다. 여섯 단계를 자동으로 실행하거나 출력 디렉토리를 생성하거나 감사 아티팩트를 작성하지 마십시오. 유용한 경우 집중 에이전트를 실행할 수 있습니다. 에이전트는 결과를 현재 작업에 반환합니다.
- 전체 감사 모드: 사용자가 코드베이스 감사 또는 침투 테스트를 명시적으로 요청하거나, 전체, 포괄적 또는 종단 간 보안 검토를 요청하거나, 보고서 아티팩트를 요청할 때 전체 워크플로를 사용합니다. 아래 정의된 모든 6단계를 실행하고 파일을 작성합니다.
요청이 두 모드 중 하나를 의미할 수 있는 경우, 파일을 만들거나 전체 워크플로를 시작하기 전에 하나의 집중된 질문을 합니다.
플랫폼 용어
이 스킬은 에이전트 중립적입니다:
- 부모는 실행을 조정하고 공유 상태를 소유하는 에이전트입니다.
- 작업 도구는 플랫폼의 위임 또는 하위 에이전트 메커니즘입니다.
research에이전트는 집중적인 소스 탐색 및 사실 확인을 위해 위임된 에이전트입니다.general에이전트는 광범위한 조사 및 제한된 로컬 실행을 위해 위임된 에이전트입니다.subagent_type:제목에서 이 두 위임된 에이전트 역할 중 어느 것이 해당 작업을 실행하는지 지정합니다.
역할, 쓰기 격리, 프롬프트 및 독립성 경계를 유지하면서 동등한 플랫폼 기능을 사용하십시오.
보편적 실행 안전
이 규칙은 두 작동 모드 모두에 적용됩니다. 소스 검사는 읽기 전용입니다. 대상 제어 빌드, 테스트, 프로세스, 브라우저, 에뮬레이터, 퍼저 및 픽스처 처리는 OS가 적용하는 샌드박스 내에서만 실행하십시오. 이 샌드박스는 다음 모든 제어를 제공해야 합니다:
- 외부 네트워크 없음; 검사에 로컬 클라이언트/서버 트래픽이 필요한 경우에만 격리된 루프백 네임스페이스를 사용하십시오.
- 안전한 값이 있는 명시적 허용 목록으로 채워진 빈 환경, 스크래치 로컬
HOME, 임시 디렉토리 및 캐시. - 읽기 전용 대상 및 툴체인, 대상 제어 프로세스는 할당된
scratch/디렉토리 내에서만 쓸 수 있습니다. - 명시적인 낮은 CPU, 메모리, 프로세스, 파일 크기, 디스크 및 벽시계(Wall-clock) 제한.
대상 제어 프로세스 외부의 에이전트는 빌드가 소스 옆에 써야 할 때 할당된 scratch/ 디렉토리에 일회용 소스 복사본을 만들 수 있습니다. 지침 모드에서는 대상 제어 파일을 보관하지 마십시오. 전체 감사 모드에서는 신뢰할 수 있는 부모 측 코드만이 쓰기 격리 절차에 따라 최소한의 비밀 결과를 보관된 artifacts/로 승격할 수 있습니다. 보관된 출력 디렉토리(에이전트 자체 할당 scratch/ 이외), 다른 에이전트의 디렉토리, 호스트 홈 디렉토리, 자격 증명, 소켓 또는 공유 서비스를 대상 코드에 노출하지 마십시오. 종속성을 설치하거나 빌드가 이를 가져오도록 허용하지 마십시오. 이미 로컬에서 사용 가능한 도구와 종속성만 사용하십시오. 모든 제어를 적용할 수 없는 경우 대상 코드를 실행하지 마십시오: 누락된 샌드박스 기능을 검증 필요 차단기로 보고하고 안전한 검증 계획을 제공하십시오.
더미 주체, 픽스처 및 비밀을 사용하십시오. 배포된 엔드포인트, 외부 서비스, 공유 인프라, 프로덕션 ID, 다른 사용자의 데이터 또는 라이브 제어 평면을 프로브하지 마십시오. 라이브 또는 공유 프로세스에 대한 가용성을 테스트하거나, 아티팩트를 게시하거나, 릴리스를 변경하거나, 유료 API 할당량을 소비하거나, 결함을 입증하는 데 필요한 최소 로컬 효과를 초과하여 계속하지 마십시오. 결정적 사실이 소스 또는 샌드박스 픽스처 외부에 있는 경우 검증 필요로 보고하십시오.
전체 감사 설정
전체 감사 모드에서는 정찰 전에 다음 값을 확인하십시오:
- 스킬 디렉토리: 이
SKILL.md가 포함된 절대 디렉토리. - 대상: 검토 중인 절대 저장소 루트.
- 저장소 이름: 디렉토리 또는 로컬 Git 원격의 안정적인 저장소 식별자.
- 출력 디렉토리: 대상 외부의 새 쓰기 가능 디렉토리로, 기본값은
~/security-audit-skill/<repo-name>/run-<N>이며, 여기서<N>은 다음 사용하지 않는 정수입니다. 사용자가 명시적으로 선택하고 부모가 버전 제어가 전체 디렉토리를 무시하는지 확인하는 경우에만 대상 내의 디렉토리를 사용하십시오. 그렇지 않으면 중지하고 외부 경로를 요청하십시오. - 소스 참조: 검토된 커밋과 작업 트리가 더티인지 여부. 검토되지 않은 생성 또는 수정된 파일을 다른 리비전으로 취급하지 마십시오.
쓰기 격리
부모는 공유 실행 파일을 생성하고 유일한 작성자입니다:
run-metadata.jsonarchitecture.mdcoverage-ledger.jsonfindings.jsonREPORT.mdFINDINGS-DETAIL.mdNEEDS-VALIDATION.md
각 헌터 또는 검증자는 <output-dir>/agents/<agent-id>/ 아래에 고유한 루트를 받으며, 별도의 scratch/ 및 artifacts/ 디렉토리가 있습니다. 표준 에이전트 ID는 ^[a-z0-9][a-z0-9_-]{0,63}$와 일치해야 하며 Windows 장치 이름(예: con, prn, aux, nul, com1com9, lpt1lpt9)과 같아서는 안 됩니다. 소문자 ID는 대소문자 충돌을 방지합니다. 에이전트 및 모든 대상 제어 프로세스는 scratch/에만 쓸 수 있습니다. 보관된 artifacts/는 부모 소유이며 샌드박스에 노출되지 않으며 신뢰할 수 있는 부모 측 승격 코드만 쓸 수 있습니다. 에이전트는 공유 파일, 대상 소스, 보관된 아티팩트 또는 다른 에이전트의 디렉토리를 변경할 수 없습니다. /tmp 또는 호스트 홈 디렉토리를 쓰기 가능한 대체 위치로 사용하지 마십시오.
실행 전에 부모는 에이전트의 scratch/ 및 artifacts/ 루트에 대한 신뢰할 수 있고 상속 불가능한 디렉토리 디스크립터를 열고 보관하며, 예상되는 스크래치 상대 아티팩트 파일의 허용 목록과 명시적인 파일별 및 누적 바이트 제한을 기록합니다. 이러한 디스크립터를 에이전트나 샌드박스에 절대 전달하지 마십시오. 샌드박스 및 모든 프로세스가 종료된 후, 신뢰할 수 있는 부모 측 코드는 각 허용된 파일을 개별적으로 승격합니다:
- 선언된 상대 경로를 확인합니다: 절대 경로, 빈 경로,
.,..또는 심볼릭 링크 구성 요소를 거부합니다. - 유지된 스크래치 루트 디스크립터에서 각 상위 구성 요소를 팔로우 없음 디렉토리 상대 작업으로 탐색합니다. 경로로 다시 열지 마십시오.
- 리프를 팔로우 없음 및 비차단으로 엽니다.
fstat를 사용하여 일반 파일이고 링크 수가 정확히 1이며 기록된 파일별 및 누적 바이트 제한 내에 있는지 확인합니다.- 해당 디스크립터에서 읽는 동안 이러한 제한을 다시 적용합니다.
- 확인된 크기를 정확히 복사하고
fstat를 반복하여 변경된 ID, 유형, 링크 수 또는 크기를 거부합니다. - 대상에 대해 유지된 아티팩트 루트 디스크립터에서 각 상위 구성 요소를 팔로우 없음 디렉토리 상대 작업으로 탐색합니다. 각 기존 구성 요소가 실제 디렉토리여야 하며, 누락된 디렉토리를 먼저 독점적으로 생성한 후 팔로우 없음으로 다시 열고 확인합니다.
- 리프를 링크를 따르지 않고 독점적으로 생성하고, 열린 대상이 일반 파일이고 링크 수가 1인지 확인한 후, 검증된 소스 디스크립터에서 경로를 다시 열지 않고 복사합니다.
- 비 POSIX 시스템에서 동등한 경쟁 안전 API를 사용합니다.
- 스크래치를 재귀적으로 복사하거나 글로브하지 말고, 아티팩트에 아카이브를 추출하지 말고, 심볼릭 링크, FIFO, 소켓, 장치, 디렉토리, 하드 링크된 파일, 변경 중인 파일 또는 제한을 초과하는 파일을 열거나 승격하지 마십시오.
- 검사 중 하나라도 사용할 수 없거나 적용할 수 없거나 실패하면 스크래치 항목을 폐기합니다. 결정적 증거인 경우
needs_v를 보관합니다.