Claude의 소프트웨어 보안을 위한 자동 공격 표면 축소
자동화된 공격 표면 분석 및 축소는 코드 도달 가능성을 최소화하여 배포된 소프트웨어의 보안을 실질적으로 개선하며, 개별 취약점을 발견하거나 수정할 필요 없이 알려지지 않은 취약점의 심각도를 낮춥니다.
전통적인 소프트웨어 보안은 개별 취약점을 찾아 수정하는 데 의존하며, 이는 확장성이 떨어지는 프로세스입니다. 반면, 공격 표면을 줄이면 공격자가 도달할 수 있는 코드를 제한하여 알려지지 않은 취약점도 악용하기 어렵게 만듭니다. 이 접근 방식은 코드베이스의 전반적인 위험 프로필을 최소화합니다.
코드베이스 공격 표면 축소 방법
공격 표면 축소 기술은 대규모 소프트웨어 프로젝트에 내재된 복잡성과 변경으로 인해 발생하는 불필요한 코드 노출을 식별하고 제한하는 것을 목표로 합니다. 이 프로세스는 코드를 적절한 보안 게이트 뒤로 이동시킵니다. 예를 들어, 인증 전 기능을 인증 후로 이동하거나 기본 활성화에서 명시적 선택으로 변경하는 것입니다.
Anthropic은 자동화된 공격 표면 분석을 위해 세 가지 특정 방법에 집중했습니다:
- 기본 구성: 배포된 기본 구성에서 도달 가능하지만 기본 기능에서 사용할 의도가 없는 코드를 식별합니다.
- 구성 상호작용: 개별적으로는 합리적으로 보이지만 결합될 때 보안 문제를 일으키는 구성 옵션 쌍을 찾습니다 (예: 보안 제어를 조용히 비활성화).
- 조기 도달 가능성: 인증과 같은 적절한 보안 제어가 실행되기 전, 피해자 상호작용 없이, 또는 프로토콜 상태 전환 전에 실행되는 보안에 민감하고 복잡한 코드를 식별합니다.
오픈소스 프로젝트 전반에 걸친 Claude의 발견
이 기술을 C, C++, Java, PHP, Python을 포함한 언어로 5백만 줄 이상의 코드를 대표하는 25개의 대규모 오픈소스 프로젝트에 적용하여 493개의 발견된 문제를 얻었습니다. 이러한 발견은 프로젝트의 배포 모델에 따라 분류되었습니다:
- 공개: 도달할 수 있는 모든 사용자를 대상으로 설계된 프로젝트 (예: 업스트림 응답을 구문 분석하는 DNS 리졸버).
- 게이트: 인증된 사용자를 대상으로 하며 인증이 완료될 때까지 기능이 제한되는 프로젝트.
- 비공개: 운영자의 비공개 환경만 제공하기 위해 배포된 프로젝트.
게이트 프로젝트 취약점
Claude는 11개의 게이트 프로젝트 모두에 의도치 않게 도달 가능한 코드가 포함되어 있음을 발견했습니다. 구체적으로, 게이트 코호트는 기본 구성에서 93개의 불필요한 인증 전 표면, 인증 전에 코드가 실행되거나 상태가 기록된 37개 위치, 그리고 관리자가 구성한 인증 전 제어를 조용히 약화시키는 61개의 구성 조합을 보여주었습니다. 이러한 문제는 단독으로 즉시 악용 가능하지는 않았지만 필요한 공격 표면을 크게 확장했습니다.
구성 상호작용 문제의 영향
구성 상호작용 분석은 모든 프로젝트 유형에서 가장 영향력 있는 발견 중 일부를 생성했습니다. Claude는 오류, 경고 또는 상호작용에 대한 문서 없이 수락된 162개의 보안에 민감한 구성 조합을 발견했습니다.
- 보안 제어 조용한 비활성화: 이 중 94개 사례에서 설정 조합이 보안 제어를 조용히 껐습니다.
- 불일치: 나머지 68개 사례는 보안 메커니즘 내의 불일치를 포함했습니다. 예를 들어, 비활성화로 구성되었음에도 불구하고 리스너가 계속 도달 가능하거나, 구성 파일의 순서에 따라 실제 동작이 달라지는 충돌하는 설정이 있습니다.
서로 관련 없는 네 개의 프로젝트에서 독립적으로 발견된 한 가지 특정 패턴은 실패-개방 취약점을 포함했습니다: 관리자가 IP 주소 대신 호스트 이름 또는 와일드카드 패턴을 액세스 규칙에 사용하고, 역방향 DNS 조회를 제어하는 별도의 옵션이 비활성화된 경우입니다. 조회가 꺼져 있으면 서버는 규칙을 클라이언트의 IP 주소와 일반 텍스트로 비교했으며, 이는 호스트 이름 패턴과 일치할 수 없어 거부 규칙이 실패-개방되도록 만들었습니다.
사례 연구: OpenSSH 공격 표면 축소
OpenSSH는 높은 감사를 받는 C 코드베이스로, Claude가 가장 큰 백분율의 공격 표면 축소를 달성한 프로젝트입니다. Claude는 10.4 릴리스에서 SSH 데몬의 입력 경로를 추적했고, 기본 구성에서 인증되지 않은 클라이언트가 도달할 수 있는 ML-DSA-44 양자 후 서명 알고리즘에 대한 약 4,500줄의 새롭고 실험적인 코드를 발견했습니다.
이 코드는 관리자가 알고리즘을 명시적으로 제외했을 때에도 도달 가능했습니다. 데몬이 해당 키 유형이 허용되는지 확인하기 전에 클라이언트가 보낸 키 유형을 구문 분석했기 때문입니다. 이 4,500줄은 기본 sshd에서 OpenSSH 자체 인증 전 코드의 약 16%를 나타냈습니다.
이 초기 발견 후, Claude는 10.5 릴리스에서 두 가지 격차를 식별했습니다:
- 클라이언트 주장 불일치: 검사는 클라이언트가 광고한 알고리즘 이름을 확인했지만, 파서는 키 블롭 내부에 포함된 유형 문자열에 의해 선택되어 클라이언트가 하나의 알고리즘을 광고하면서 다른 취약한 키 유형을 보낼 수 있었습니다.
- 인증서 검증 우회: 인증서 키 유형이 기본적으로 활성화되었습니다. 공격자는 인증서를 제공하여 sshd가 포함된 CA 공개 키를 역직렬화하고 구성을 참조하기 전에 전체 서명 검증을 실행하도록 할 수 있었습니다. 이로 인해 키 교환을 완료할 수 있는 모든 클라이언트가 바이너리의 모든 공개 키 서명 검증기에 도달할 수 있게 되었습니다.
10.6 버전에서 구현된 결과 수정은 구성 검사를 파서 자체 내부에 배치하여 인코딩된 키 유형과 인증서의 CA 서명 알고리즘이 역직렬화나 서명 검증이 발생하기 전에 구성된 허용 목록과 비교되도록 했습니다. 이 변경으로 인증되지 않은 클라이언트가 이전에 도달할 수 있었던 OpenSSH 코드의 약 5분의 1이 제거되었습니다.
구현 및 결론
Anthropic은 이러한 공격 표면 축소 기술을 재사용 가능한 Claude 스킬로 결합했으며, 이는 OSS-Scanner에 통합되고 있습니다. 이 스킬은 세 단계로 작동합니다:
- 기본 구성에서 도달 가능하지만 의도된 기능에서 사용되지 않는 코드를 확인합니다.
- 구성에 관계없이 하드 게이트(예: 인증) 또는 프로토콜 상태 머신 진입점 전에 실행되는 코드를 검사합니다.
- 보안 제어를 조용히 끄거나 효율성을 저하시키는 구성 조합을 평가합니다.
기본 구성 발견의 경우, 스킬은 게이트를 설계하고 구현하며 수정된 빌드가 프로젝트의 기존 테스트 스위트를 통과하는지 확인합니다. 다른 두 단계의 경우, 구성 검사 순서를 변경하거나 상태 순서를 강제하는 가드를 추가하는 등의 변경을 제안합니다.
제시된 기술은 가능한 것의 제한된 관점을 제공하지만, 방법론은 코드베이스의 공격 표면을 줄이는 것이 보안을 개선하는 매우 실용적이고 효과적인 방법임을 시사합니다. 불필요한 노출을 최소화함으로써 방어자는 현재 악용되고 있는지 여부와 관계없이 코드베이스의 모든 알려지지 않은 취약점으로 인한 위험을 동시에 줄일 수 있습니다.