RSS 트레일 오브 비츠 블로그 노트

RSS 트레일 오브 비츠 블로그

트레일 오브 비트(Trail of Bits)의 공식 블로그는 blog.trailofbits.com입니다. 트레일 오브 비트는 침투 테스트, 보안 코딩 및 소프트웨어 보안 평가를 포함한 다양한 서비스를 제공하는 사이버 보안 회사입니다. 이 블로그는 사이버 보안과 관련된 지식과 통찰력을 공유하는 것에 중점을 두고 있는 것으로 보입니다. 소프트웨어 보안, 위협 모델링, 취약성 분석 및 보안 코딩 관행과 같은 다양한 주제에 대한 기사와 게시물이 포함되어 있습니다. 이 웹사이트는 디자인과 레이아웃이 깨끗하고 단순하여 특정 기사나 주제를 쉽게 찾고 탐색할 수 있습니다. 사용자가 특정 기사나 주제를 빠르게 찾을 수 있는 검색 기능이 제공됩니다. 또한, 기사는 주제별로 분류되어 관련된 콘텐츠를 쉽게 탐색할 수 있습니다. 이 블로그는 또한 사이버 보안 분야의 전문가들로부터 게스트 포스트를 특징으로 하여 사이트에서 공유되는 관점과 통찰력의 다양성을 높입니다. 전반적으로, 트레일 오브 비트 블로그는 사이버 보안에 대해 더 많이 배우고 싶은 사람들에게 귀중한 자원이며, 이 분야의 최신 개발과 동향을 따라갈 수 있는 곳으로 보입니다.

노트 스레드

Trail of Bits는 OpenAI의 Daybreak 이니셔티브와 협력하여 오픈소스 소프트웨어의 보안 취약점을 해결하기 위해 Patch the Planet을 출시했습니다. 이 프로그램은 GPT-5.5-Cyber과 같은 고급 AI 모델을 활용하여 버그를 식별하며, Trail of Bits 엔지니어들이 발견된 내용을 분류하고 패치합니다. 첫 주에 이 이니셔티브는 암호화 및 네트워킹을 포함한 다양한 중요 소프트웨어 도메인에 걸쳐 19개 프로젝트를 검토했습니다. 그 결과 수백 개의 버그가 발견되었고, 64개의 풀 리퀘스트가 제출되었으며, 51개의 이슈가 제기되었습니다. 중요하게도 Trail of Bits는 단순히 버그 보고서가 아닌 실제 패치를 제공하는 데 중점을 두었으며, 이미 37개의 패치가 병합되었습니다. 이러한 병합된 기여에는 버그 수정, 새로운 테스트, 퍼징 하네스, 공급망 도구 개선이 포함되었습니다. python.org 및 aiohttp와 같은 특정 프로젝트는 유지보수자로부터 상당한 개선과 신속한 수정을 받았습니다. 이 이니셔티브는 또한 퍼징 랩 및 변형 분석 파이프라인과 같은 복잡한 보안 도구를 신속하게 구축하는 데 있어 AI의 힘을 강조했습니다. 이 기사는 AI를 통해 버그를 찾는 것이 점점 쉬워지고 있지만, 실제 과제는 이제 발견 내용을 확인하고, 심각도를 평가하며, 효과적인 패치를 구현하는 데 있다고 강조합니다. Trail of Bits는 Patch the Planet을 계속 진행하며 더 많은 오픈소스 유지보수자에게 지원을 신청하도록 초대하고 있습니다.
CdXz5zHNQW_zplxitPXLL.gif
연구원들은 일부 RSA 개인 키에 0으로 심하게 편향된 비트가 있으며, 이는 감지 및 신속한 인수분해가 가능함을 발견했습니다. badkeys 프로젝트의 Hanno Böck와 함께 이 특성을 가진 수백 개의 고유한 키를 발견하고 과거 데이터를 분석하여 이 문제를 시간에 따라 추적했습니다. 이러한 키에서 0 비트의 패턴은 종종 매우 구조화되어 있어 패턴을 악용하기 위한 다항식 기반 암호 분석 기법 개발을 가능하게 합니다. 연구원들은 0 비트의 반복 블록을 가진 RSA 모듈리의 두 가지 패턴을 식별했으며, 한 패턴은 설명되지 않은 채로 남아 있고 다른 패턴은 CompleteFTP 파일 전송 소프트웨어의 이전 버전에서 나온 큰 정수 코드의 타입 불일치로 추적되었습니다. CompleteFTP 버그는 또한 취약한 짧은 슬리브 DSA 키를 생성했으며, 연구원들은 인터넷 스캔에서 603개의 고유한 RSA 개인 키와 74개의 DSA 키를 복구했습니다. badkeys 프로젝트는 알려진 취약점에 대해 공개 키를 확인하는 오픈 소스 서비스이며, 실제 키 데이터 세트를 검색함으로써 연구원들은 이러한 패턴을 가진 많은 수의 실제 키를 발견했습니다. 연구원들은 CompleteFTP 취약점을 역공학하여, 그것이 림의 크기와 RNG 출력의 크기 간의 불일치로 인해 발생했음을 발견했습니다. 이 취약점은 CompleteFTP 팀이 취약한 키를 자동으로 확인하고 키를 다시 생성해야 하는 경우 사용자에게 경고하는 업데이트를 출시한 후 격리되었습니다. 연구원들은 또한 정수를 다항식으로 표현하여 인수분해하는 기법을 개발했으며, 이는 일반 RSA 모듈리를 인수분해하는 데 사용될 수 있습니다. 이러한 취약점의 발견은 실제 연구의 중요성과 잠재적인 약점을 식별하고 해결하기 위해 암호 구현에 대한 지속적인 모니터링의 필요성을 강조합니다.
CdXz5zHNQW_iFKnuRveAb.webp
퍼블릭 스킬 마켓플레이스는 자격 증명 및 데이터를 훔치기 위해 설계된 악성 스킬로 가득합니다. 보안 회사들은 설치 전에 이러한 위협을 탐지하기 위해 스킬 스캐너를 도입했지만, 우리의 테스트 결과는 이들이 비효과적임을 보여줍니다. 우리는 Cisco의 에이전트 스킬 스캐너인 ClawHub와 skills.sh에 통합된 여러 스캐너의 탐지 메커니즘을 성공적으로 우회했습니다. 이러한 우회는 표준 공격 기법과 상대적으로 적은 노력으로 달성되었습니다. 이러한 스캐너의 정적인 특성은 공격자가 성공할 때까지 반복적으로 자신의 방법을 테스트하고 개선할 수 있도록 합니다. 소프트웨어 공급망의 보안은 항상 우려 사항이었으며, 에이전트 시스템의 등장은 새로운 벡터인 스킬을 도입했습니다. 악성 스킬은 코드 외에도 자연어 프롬프트를 활용하여 공격 가능성을 확장할 수 있습니다. ZIP 아카이브, 큐레이션된 마켓플레이스, 퍼블릭 마켓플레이스와 같은 스킬 배포 채널은 종종 보안보다 속도를 우선시했습니다. 특히 퍼블릭 마켓플레이스는 사용자의 시스템을 손상시키려는 악성 스킬로 범람했습니다. VirusTotal과 Gemini 3 Flash 기반 도구를 사용하는 ClawHub 스캐너에 대한 우리의 분석은 악성 코드를 숨기기 위해 과도한 새 줄을 추가하는 것만으로도 우회할 수 있음을 보여주었습니다. 임의의 git 저장소를 처리하는 Cisco의 스킬 스캐너와 skills.sh의 스캐너도 취약했습니다. 우리는 악성 지침을 .docx 파일에 삽입하고 패턴 매칭 및 LLM 기반 분석을 모두 우회하는 오염된 .pyc 바이트코드를 사용하여 이를 악용했습니다. skills.sh에 대한 프롬프트 주입 공격은 무해해 보이는 기업 구성 언어 내에 악성 명령을 위장했습니다. 이러한 발견은 현재 스킬 보안 조치의 상당한 취약점을 강조합니다.
CdXz5zHNQW_sN7fPOqey7.webp
Go의 네이티브 퍼징은 Rust, C, C++ 생태계에서 발견되는 고급 기능이 부족하여 정수 오버플로우 및 고루틴 누수와 같은 일반적인 버그를 탐지하지 못합니다. 이러한 한계를 해결하기 위해 gosentry는 Go 툴체인의 퍼징 중심 포크로 개발되었습니다. Gosentry는 LibAFL을 통합하여 네이티브 구조체 퍼징, Nautilus를 사용한 문법 기반 퍼징, 이전에 놓쳤던 버그 클래스 탐지를 가능하게 합니다. 표준 testing.F 워크플로우를 유지하여 기존 Go 퍼즈 하네스를 새로운 명령줄 플래그와 함께 사용할 수 있습니다. Gosentry는 구조체, 슬라이스, 포인터와 같은 복합 유형을 처리하는 구조체 인식 퍼징을 통해 입력 품질을 향상시킵니다. 또한 Nautilus가 JSON과 같은 복잡한 구조체에 대한 문법 유효한 입력을 생성하고 변형하는 문법 기반 퍼징도 지원합니다. 이 도구는 Go의 기본 퍼저가 놓칠 수 있는 정수 오버플로우, 데이터 경쟁, 고루틴 누수, 실행 시간 초과를 포함한 다양한 잘못된 동작을 식별합니다. 퍼즈 콜백을 캡처하고 Rust 기반 LibAFL 러너를 통해 실행함으로써 gosentry는 퍼징 엔진, 스케줄링 및 탐지기를 개선합니다. 이미 Optimism 및 Revm과 같은 프로젝트에서 네이티브 Go 퍼징으로는 찾기 어려운 상당한 버그를 발견했습니다. 이 프로젝트는 GitHub에서 오픈 소스로 제공되며 모든 기능에 대한 포괄적인 문서를 제공합니다.
CdXz5zHNQW_Mg1wCwp9Lj.webp
"Trailmark은 소스 코드를 쿼리 가능한 호출 그래프로 변환하는 새로운 오픈 소스 라이브러리입니다. 이 그래프는 함수, 클래스 및 그 관계를 의미론적 메타데이터와 함께 나타냅니다. Claude 스킬은 Python API를 통해 이 그래프와 직접 상호 작용할 수 있습니다. 전통적인 보안 분석은 종종 발견 목록에 의존하지만, 공격자는 그래프로 생각하므로 방어자에게 불리합니다. Trailmark는 Claude와 같은 AI 모델에 이러한 그래프 기반 추론 기능을 제공하는 것을 목표로 합니다. 코드 변경을 통해 테스트 품질을 평가하는 방법인 변이 테스트는 많은 생존 변이체를 생성합니다. 이러한 변이체의 평면 목록은 동등한 변이체, 죽은 코드 또는 실제로 중요한 변이체를 구별하지 못합니다. Trailmark는 Claude가 신뢰할 수 없는 입력으로부터의 도달 가능성과 같은 보안 관련성을 기반으로 이러한 변이체를 분류할 수 있도록 합니다. 이 라이브러리는 AST를 위한 tree-sitter를 사용한 파싱, 고성능 그래프로의 인덱싱, 호출자, 호출 대상 및 공격 표면과 같은 정보 쿼리의 세 가지 단계로 코드를 처리합니다. Trailmark는 17가지 프로그래밍 언어를 지원하며 8가지 사전 구축된 Claude Code 스킬을 제공합니다. 이러한 스킬은 변이체 분류, 테스트 벡터 생성 및 프로토콜 다이어그램과 같은 작업에 도움이 됩니다. 예를 들어, "genotoxic" 스킬은 그래프 분석을 사용하여 생존 변이체를 분류합니다. 마찬가지로 "vector-forge"는 식별된 커버리지 격차를 해소하기 위한 테스트 벡터를 생성합니다. Trailmark는 또한 정적 분석기 및 감사 도구의 결과를 통합하여 코드 그래프에 매핑합니다. 암호화 라이브러리에 대한 내부 사용은 잘 테스트된 코드에서 동등한 변이체가 종종 대다수를 차지한다는 것을 보여주었으며, 이는 평면 목록에서 놓친 세부 정보입니다. 그래프 분석은 libhydrogen의 모든 암호화 작업에 영향을 미치는 단일 순열 기본 요소와 같은 아키텍처 병목 현상을 강조했습니다. 변이 테스트는 표준화된 테스트 벡터가 부족한 새로운 구성에 대해 테스트가 코드 동작을 제한하지 못하는 부분을 식별하는 데 유용합니다. 다양한 코드베이스에 걸쳐 일반적인 패턴이 나타났습니다. 산술 모듈은 높은 폭발 반경을 가지며, 코덱 파서는 주요 퍼징 대상이며, 속성 기반 테스트는 종종 희소합니다. 궁극적으로 Trailmark는 다양한 분석 도구를 연결하고 더 표적화된 보안 평가를 가능하게 하는 연결 조직 역할을 합니다."
구글의 양자 AI 그룹은 제 1세대 양자 컴퓨터가 제로 지식 증명을 사용하여 9분 안에 타원 곡선 암호를 깨뜨릴 수 있다고 주장했다. Trail of Bits는 구글의 러스트 프로버 코드의 취약성을 악용하여 구글의 지표를 크게 개선한 가짜 제로 지식 증명을 만들었다. 이러한 취약성에는 메모리 안전성 문제와 논리적 결함이 포함되어 있었으며, 구글은 이후 이를 패치했다. Trail of Bits의 증명은 총 연산을 830만 개로, 큐비트를 1,164개로 줄였으며, 토플리 게이트를 제거했다. 가짜 증명은 여전히 구글의 패치되지 않은 검증을 통과했으며, 정당한 증명과 구별할 수 없었다. 구글의 증명은 양자 회로의 비용을 계산하기 위해 제로 지식 가상 머신(zkVM)을 사용했다. zkVM 시뮬레이션에는 개인 입력(예: 양자 회로)과 함께 프로그램이 특정 공개 출력(리소스 제한 포함)을 생성하는 것을 증명하는 것이 포함된다. 주요 취약성 중 하나는 회로의 어셈블리 스크립트에서 연산 유형을 조작하여 토플리 게이트 카운터를 우회하는 것이었다. 이러한 조작으로 프로그램은 연산을 수행할 수 있었지만, 그 비용을 올바르게 보고하지 않았기 때문에, 효과적으로 증명을 위조할 수 있었다. 이 사건은 제로 지식 증명 시스템에 의해 도입된 고유한 공격 표면을 보여준다.
CdXz5zHNQW_xMS1ou095P.webp
WhatsApp의 새로운 개인 추론(Private Inference) 기능은 메시지를 Trusted Execution Environments(TEEs)라고 불리는 보안 하드웨어 엔클레이브에서 처리하여 종단 간 암호화와 AI를 통합하는 것을 목표로 합니다. AMD의 SEV-SNP와 Nvidia의 기밀 GPU 플랫폼을 활용하는 이러한 TEE는 Meta조차도 평문 메시지에 접근할 수 없도록 설계되었습니다. 출시 전 감사에서 사용자 개인 정보를 침해할 수 있는 8가지 고위험 문제를 포함한 수많은 취약점이 발견되었습니다. 이러한 취약점은 증명 측정 후 로드된 신뢰할 수 없는 데이터와 보안 패치 수준의 잘못된 검증에서 비롯되었습니다. 예를 들어, 증명 측정 후 환경 변수나 ACPI 테이블을 로드하면 악성 코드 삽입을 위한 백도어가 생성되었습니다. 또한 시스템은 암호화 인증서와 비교하여 검증하는 대신 펌웨어의 주장된 패치 수준을 초기에는 신뢰했습니다. 더욱이, 증명 보고서의 신선도 보장 부족은 재현 공격을 허용하여 공격자가 무기한으로 보안 서버를 사칭할 수 있게 했습니다. Meta는 변수, 사용자 정의 부트로더, 인증서 기반 패치 수준 검증에 대한 엄격한 검증을 구현하고 증명 보고서에 논스를 포함하여 이러한 문제를 해결했습니다. 감사는 TEE가 완벽한 해결책이 아니며 구현 및 배포 시 세부 사항에 대한 세심한 주의가 필요함을 강조합니다. 얻은 주요 교훈은 모든 중요 데이터 측정, 입력 유효성 검사, 철저한 부정 테스트 수행의 중요성입니다. 물리적 보안 및 재현 가능한 투명성 달성 또한 TEE 배포에서 지속적인 과제입니다. 궁극적으로 TEE 기반 시스템을 보호하는 것은 주요 아키텍처 선택뿐만 아니라 모든 계층에서 보안에 대한 엄격한 주의에 달려 있습니다.
코드 커버리지는 실행을 측정할 뿐 검증을 측정하지 않아 테스트되지 않은 중요한 기능이 숨겨질 수 있다는 점에서 위험한 지표입니다. 체계적으로 버그를 도입하여 테스트가 이를 잡아내는지 확인하는 뮤테이션 테스팅은 테스트되지 않은 코드를 표시함으로써 이러한 문제를 해결합니다. 역사적으로 뮤테이션 테스팅 도구는 느리고 언어별로 제한적이어서 특히 블록체인 분야에서 채택을 저해했습니다. 정규 표현식을 사용하는 Universalmutator는 인기를 얻었지만 여러 줄 문장 처리 및 비효율적인 뮤턴트 우선순위 지정에 한계가 있었습니다. Slither-mutate는 뮤턴트 우선순위 지정과 더 깔끔한 테스팅 주기를 통해 속도를 향상시켰지만 Solidity에 국한되었습니다. 새로운 도구인 MuTON과 mewt는 이러한 과제를 극복하는 것을 목표로 합니다. MuTON은 트리-파서(tree-sitter parser)를 활용하여 언어 이해도를 높이고 여러 줄 문장을 처리함으로써 TON 블록체인 언어에 대한 최상위 지원을 제공합니다. Mewt는 Solidity, Rust, Go도 지원하는 언어 불가지론적 코어 역할을 합니다. 두 도구 모두 SQLite 데이터베이스에 결과를 저장하여 지속성과 유연한 필터링을 가능하게 합니다. 이제 AI 에이전트는 전문화된 기술을 사용하여 캠페인을 효율적으로 구성하고 결과를 분류할 수 있습니다. 향후 개발은 요구 사항을 인코딩하는 AI 기반 테스트 생성을 목표로 하며, 단순히 버그 탐지를 넘어섭니다. 목표는 AI 에이전트에게 회의적인 태도를 부여하고 강력한 테스트 스위트에 대한 외부 검증을 요구하는 것입니다. 사용자들은 MuTON과 mewt를 설치하고 오픈 소스 프로젝트에 기여하며 뮤테이션 테스팅을 간소화할 새로운 AI 기술을 주시하도록 권장됩니다. 이러한 발전은 뮤테이션 테스팅을 소프트웨어 개발의 보다 일상적이고 효과적인 부분으로 변화시킬 것을 약속합니다.
CdXz5zHNQW_50LokEbBRD.webp
새로운 Claude 플러그인이 코드 개발 및 감사를 위해 출시되었습니다. 이 플러그인은 이전 블로그 게시물에서 소개된 차원 분석 기법을 활용합니다. 버그를 찾는 보안 기술과는 달리, 이 플러그인은 코드에 차원 유형을 주석으로 추가하고 불일치를 표시합니다. 이 접근 방식은 테스트에서 93%의 재현율을 달성하여 50%의 재현율을 보인 기본 프롬프트를 능가했습니다. 플러그인은 Claude에서 제공된 명령어를 통해 다운로드하여 사용할 수 있습니다. 기존의 보안 분석 기술은 종종 낮은 품질의 결과를 낳습니다. 차원 분석 플러그인은 LLM을 사용하여 코드베이스를 자체 판단에만 의존하지 않고 차원 유형별로 분류합니다. 이는 더 정확하고 신뢰할 수 있는 버그 감지로 이어집니다. 플러그인은 차원 발견, 주석 추가, 전파, 유효성 검사의 4단계로 작동합니다. 첫 번째 단계에서는 기본 단위와 파생 단위를 식별하여 차원 어휘를 생성합니다. 두 번째 단계에서는 코드베이스에 주석을 추가하여 다양한 요소에 차원 유형을 할당합니다. 세 번째 단계에서는 차원이 파일 전체에 전파되고, 마지막 단계에서는 차원 불일치가 식별 및 분류됩니다. 개발자는 플러그인을 실행하고 주석을 커밋하여 코드 이해도를 높이고 버그를 찾을 수 있습니다. 또한 개발자는 플러그인 개선에 도움이 되도록 놓친 차원 오류를 보고해 줄 것을 사용자에게 권장합니다.
CdXz5zHNQW_2bndNvCXGc.webp
"mquire"는 외부 디버그 심볼에 의존하지 않고 리눅스 메모리 포렌식을 수행하도록 설계된 새로운 오픈 소스 도구입니다. 메모리 덤프 자체에서 필요한 정보를 직접 추출하여, 커널 버전을 일치시킬 필요가 없습니다. 이는 알 수 없는 커널 및 사용자 정의 빌드를 분석할 수 있게 해주며, 사고 대응 담당자에게 상당한 이점을 제공합니다. 이 도구는 메모리 덤프 내에서 발견된 BTF 타입 정보와 Kallsyms 심볼 주소를 활용합니다. mquire는 osquery에서 영감을 얻은 대화형 SQL 인터페이스를 제공하여 데이터를 쉽게 탐색할 수 있습니다. 사용자는 일회성 쿼리를 실행하거나 대화형으로 탐색하여 실행 중인 프로세스 및 열린 파일과 같은 정보를 검색할 수 있습니다. 현재 기능으로는 시스템 버전, 작업, 열린 파일, 메모리 매핑 등에 접근하는 것이 포함됩니다. mquire는 또한 삭제된 경우에도 커널의 파일 캐시에서 파일을 추출하는 ".dump" 명령을 제공합니다. 사용 사례로는 사고 대응, 포렌식 분석, 멀웨어 분석 및 보안 연구가 있습니다. 제한 사항으로는 사용자 공간 데이터에 접근할 수 없고 Kallsyms 형식에 의존한다는 점이 있습니다. 향후 개발 계획으로는 확장된 테이블 지원, 향상된 캐싱 및 DMA 기반 획득이 포함됩니다. mquire는 리눅스용 사전 빌드된 바이너리와 함께 GitHub에서 사용할 수 있습니다. 이 기사는 사용자들에게 mquire를 사용해보고 피드백을 제공하도록 권장합니다.
두 개의 인기 있는 AES 라이브러리인 aes-js와 pyaes는 CTR 모드 구현에서 기본 IV를 제공함으로써 심각한 취약점을 도입합니다. 이 결함은 키/IV 재사용을 허용하여 잠재적인 평문 복구 및 심각한 보안 침해로 이어질 수 있습니다. Trail of Bits는 이 문제를 식별하고 광범위한 영향 때문에 공개적으로 해결하기로 결정했습니다. 이 기사는 이 보안 문제에 대한 소프트웨어 개발자들의 상반된 반응을 강조합니다. 이 라이브러리들은 널리 사용되어 수많은 JavaScript 및 Python 프로젝트에 영향을 미치므로 버그의 영향력은 상당합니다. 기본 IV는 사용자가 의도치 않게 취약한 암호화 방식을 쉽게 만들 수 있게 합니다. 이러한 설계 선택은 사용자가 키/IV 재사용을 구현할 가능성을 크게 높이며, 이는 치명적인 암호화 오류입니다. 게다가, 이 라이브러리들은 GCM과 같은 최신 인증된 암호화 모드를 지원하지 않아 위험을 더욱 악화시킵니다. 이 기사는 이 문제에 대한 유지 관리자의 무시하는 반응 (어쩌고 저쩌고)과 strongSwan의 유지 관리자의 상세한 반응을 대조합니다. 또 다른 영향을 받은 프로젝트인 strongSwan은 비공개적으로 통보받았으며, 해당 유지 관리자는 기존 라이브러리와 암호 모드를 더 안전한 대안으로 교체하여 신속하게 취약점을 해결함으로써 진정한 장인 정신을 보여주었습니다. strongSwan의 수정 사항은 향후 데이터 보안을 보장하기 위한 상세한 변경 사항을 포함했습니다. 두 반응의 대조는 부주의한 코딩과 보안에 대한 헌신 사이의 차이점을 강조합니다. 이 기사는 책임감 있는 소프트웨어 개발과 보안 결함의 적절한 처리에 대한 중요성을 강조하며, 부주의한 개발자보다 장인의 필요성을 강조합니다.
CdXz5zHNQW_0CF0Genhl5.webp
표준 정수형에 대한 Go의 산술 연산은 기본적으로 묵묵히 수행됩니다. 즉, 오버플로우가 패닉 없이 래핑되어 숨겨진 보안 취약점을 초래할 수 있습니다. 이 문제를 해결하기 위해, 묵묵한 정수 오버플로우를 명시적인 패닉으로 바꾸는 go-panikint라는 수정된 Go 컴파일러가 출시되었습니다. Go-panikint는 Cosmos SDK의 RPC 페이지네이션 로직에서 실제 정수 오버플로우를 발견하는 데 사용되었으며, Go 프로젝트 퍼징의 주요 사각지대를 제거하는 데 효과적임을 입증했습니다. 이 도구는 컴파일러가 코드를 정적 단일 할당 형태로 변환하는 동안 추가 검사를 삽입하여 작동하며, 런타임에 오버플로우가 발생하면 자세한 오류 메시지와 함께 패닉을 발생시킵니다. Go-panikint는 정수 절단 문제도 감지할 수 있지만, 현재는 오탐으로 인해 이 기능은 사용되지 않고 있습니다. 이 도구는 사용하기 쉽고 공식 Go 컴파일러를 대체하여 기존 워크플로우에 통합할 수 있습니다. Go-panikint는 의도적인 오버플로우를 처리하기 위해 소스 위치 기반 필터링 및 코드 내 주석을 포함한 두 가지 필터링 메커니즘을 가지고 있습니다. 이 도구는 Cosmos SDK에 대한 퍼징 캠페인을 통해 검증되었으며, RPC 페이지네이션 로직에서 정수 오버플로우 취약점을 발견했습니다. Go-panikint는 보안 연구 및 퍼징, 그리고 지속적인 배포 및 통합이라는 두 가지 주요 사용 사례를 가지고 있습니다. 커뮤니티는 자체 프로젝트에서 go-panikint를 사용해 보고 CI 파이프라인에 통합하여 숨겨진 산술 버그를 발견하도록 권장됩니다. 전반적으로 go-panikint는 동적 분석에서 이전에 보이지 않던 Go 프로젝트의 보안 취약점을 발견하는 데 유용한 도구를 제공합니다.
CdXz5zHNQW_HqI6gnKDQs.webp
GWP-ASan은 ASan과 같은 도구의 성능 제약 사항을 해결하여 프로덕션 환경을 위해 설계된 샘플링 기반 메모리 오류 감지 도구입니다. use-after-free 및 버퍼 오버플로우와 같은 치명적인 버그를 최소한의 성능 저하로 감지합니다. GWP-ASan은 메모리 할당의 작은 부분을 계측하며, 샘플링된 할당 주변에 가드 페이지를 사용하여 메모리 접근 위반을 포착합니다. 이를 통해 힙 관련 버그를 거의 제로에 가까운 오버헤드로 식별하여 감지와 성능의 균형을 맞춥니다. 이 도구는 Chromium, Firefox, Android와 같은 다양한 프로젝트에 구현되어 다재다능함을 보여줍니다. GWP-ASan의 샘플링 방식은 대규모 배포에 적합하며, 드문 버그를 감지할 때조차 성능 비용이 무시할 정도로 작습니다. 프로그램은 Clang과 같은 컴파일러와 이를 지원하는 할당자를 사용하여 GWP-ASan으로 빌드할 수 있습니다. 도구의 동작은 샘플링 비율 및 동시 할당 최대 개수와 같은 환경 변수를 통해 구성할 수 있습니다. GWP-ASan은 프로그램이 가드 페이지 내의 메모리에 접근하려 할 때 세그멘테이션 오류를 발생시켜 버그를 식별합니다. 심볼화 도구는 오류 메시지의 가독성을 향상시킬 수 있습니다. 성능 오버헤드는 낮으며 구성 매개변수를 통해 제어할 수 있어 프로덕션 환경에서 사용하기에 적합합니다.
CdXz5zHNQW_Rh4iixZyB8.webp
이 프로젝트는 OpenSSF의 지원을 받아 Sigstore의 rekor-monitor를 프로덕션 환경에서 사용할 수 있도록 개선하는 데 초점을 맞추고 있습니다. Rekor 로그에서 변조 및 무단 신원 사용을 탐지하는 것이 목표입니다. Rekor는 투명성 로그 역할을 하며, 변조 방지 기록을 생성하지만, 개별 항목은 모니터링 없이는 본질적으로 신뢰할 수 없습니다. 개발자가 예상치 못한 항목, 특히 패키지 관리자와 관련된 항목을 능동적으로 모니터링할 수 있도록 쉽게 만드는 것이 목표입니다. 투명성 로그는 다이제스트가 의도된 종속성과 일치하는지 확인하며, Merkle 트리를 활용합니다. 모니터링은 매우 중요하며, rekor-monitor를 통해 사용자는 로그 내에서 항목 변조 및 예상치 못한 신원 사용을 확인할 수 있습니다. 예를 들어, 관리자는 패키지 업로드 중 자신의 신원이 손상되었는지 감지하기 위해 자신의 신원을 모니터링할 수 있습니다. 이 프로젝트는 Rekor v2 로그 지원, 인증서 유효성 검사, The Update Framework (TUF)와의 통합과 같은 새로운 기능을 구현했습니다. 또한, 누구나 쉽게 모니터링할 수 있도록 재사용 가능한 GitHub 워크플로우도 포함되어 있습니다. 향후 계획으로는 GopherWatch와 유사하게 사용자의 신원을 기반으로 새로운 로그 항목에 대한 알림을 제공하는 호스팅 서비스를 제공하는 것입니다. OpenSSF의 지원을 받는 이 프로젝트는 Sigstore 생태계를 보호함으로써 오픈 소스 소프트웨어의 보안을 향상시키는 것을 목표로 합니다.
CdXz5zHNQW_c8QLcSNLn3.webp
Trail of Bits가 LLVM에 상수 시간 코딩 지원을 도입하여 암호 구현을 타이밍 공격으로부터 보호하는 것을 목표로 합니다. LLVM 22에 포함될 예정인 이 새로운 기능에는 `__builtin_ct_select` 내장 함수와 지원 인프라가 포함됩니다. 이를 사용하는 컴파일러는 의도치 않게 취약점을 도입하는 코드 최적화를 방지합니다. 최신 컴파일러는 속도를 위해 최적화하지만 암호화에 중요한 상수 시간 속성을 깰 수 있습니다. 예를 들어 간단한 조회 함수는 분기를 포함하도록 최적화되어 공격자가 악용할 수 있는 타이밍 부채널을 생성할 수 있습니다. `__builtin_ct_select` 내장 함수는 최적화 수준에 관계없이 조건부 선택이 상수 시간으로 유지되도록 보장합니다. 이는 보안에 중요한 작업을 변환으로부터 보호하는 장벽 역할을 합니다. 연구에 따르면 기존 컴파일러가 프로덕션 암호 라이브러리에 취약점을 도입하는 것으로 나타났습니다. 새로운 내장 함수를 통해 개발자는 수정된 조회 함수로 예시되는 더 안전한 상수 시간 코드를 작성할 수 있습니다. 이 작업은 이전 노력을 기반으로 하며 Rust Crypto 및 BearSSL과 같은 커뮤니티에서 큰 관심을 불러일으켰습니다. 구현은 x86-64, i386 및 ARM과 같은 다양한 아키텍처에서 상수 시간 동작을 보장합니다. 초기 벤치마킹은 최소한의 성능 오버헤드와 상수 시간 속성의 완전한 보존을 나타냅니다. 향후 계획에는 산술 및 문자열 연산에 대한 지원 확장이 포함되며 LLVM을 대상으로 하는 다른 언어에서의 채택을 가능하게 할 것입니다.
Trail of Bits는 LLVM 21에 대한 상수 시간 코딩 지원을 개발하여 컴파일러가 분기를 도입하지 못하도록 함으로써 타이밍 공격으로부터 암호화 구현을 보호했습니다. 이 시스템은 `__builtin_ct_select` 내장 함수군을 도입하여 상수 시간 연산이 컴파일 과정을 통해 안전하게 유지되도록 합니다. 현대 컴파일러의 최적화는 의도치 않게 타이밍 부채널을 도입하여 암호화 코드를 취약하게 만들 수 있습니다. `__builtin_ct_select` 내장 함수는 선택 연산이 상수 시간 기계 코드로 컴파일되도록 보장하며, 원치 않는 최적화에 대한 장벽 역할을 합니다. 이는 컴파일러가 상수 시간 보장을 깨뜨리는 프로덕션 암호화 라이브러리에서 발견된 취약점을 해결합니다. Rust Crypto 및 LLVM 개발자의 피드백을 포함한 커뮤니티 참여는 이 프로젝트 개발에 매우 중요했습니다. 이 구현은 `__builtin_ct_select`가 x86-64, i386, ARM, AArch64를 포함한 다양한 아키텍처에서 상수 시간 코드로 컴파일되도록 보장합니다. 벤치마킹 결과 최소한의 성능 오버헤드와 100% 상수 시간 속성 유지가 나타났으며, 주요 암호화 라이브러리에 성공적으로 통합되었습니다. 향후 계획에는 산술, 문자열 연산 및 표현식에 대한 구현 확장이 포함되어 있으며, Rust, Swift 및 WebAssembly에서 채택될 가능성이 있습니다. 이 작업은 ETH 취리히와의 협력으로 이루어졌으며 DARPA의 지원을 받았습니다.
Trail of Bits는 LLVM 21에 대한 상시 코딩 지원을 개발하여, 분기 관련 타이밍 공격으로부터 암호학적 코드를 보호하는 컴파일러 수준의 보증을 제공하고, 최적화 과정에서 공격적인 현대 컴파일러가 의도치 않게 데이터 의존 분기를 도입하는 치명적 취약점을 해결했습니다. 핵심 솔루션은 __builtin_ct_select 내재 구조로, 이는 특수 LLVM 중간 표현(llvm.ct.select.*)으로 변환되어 보안 장벽 역할을 하여 컴파일러 전체에 걸쳐 연산의 상수 속성을 유지하도록 지시합니다. 이 본질적인 코드가 없으면, 룩업 테이블에서 사용되는 것과 같은 정교하게 설계된 상수 시간 코드는 표준 컴파일러 최적화로 깨질 수 있으며, 이 최적화는 추측적 분기를 도입하여 최소한의 사이클 변동으로도 탐지 가능한 타이밍 사이드 채널을 활용할 수 있습니다. 이 연구는 컴파일러가 유발하는 수많은 생산 암호 라이브러리에서 체계적인 상시 보장 실패를 문서화한 "브레이킹 배드"와 같은 연구의 결과를 직접적으로 다룹니다. __builtin_ct_select 내재 기능은 x86-64에서 cmov, AArch64에서 CSEL, 상수 명령어가 없는 플랫폼에서 마스크 연산을 사용하는 등 다양한 아키텍처에서 상시 실행을 보장합니다. 개발자들은 이식 가능하고 안전한 코드를 작성할 수 있습니다. 이러한 변화를 반영하기 위해 광범위한 커뮤니티 참여가 필요했으며, Rust Crypto와 PuTTY 같은 프로젝트들이 복잡한 인라인 어셈블리 우회 방식을 새로운 원시 요소로 대체할 계획이라는 강한 관심을 끌었습니다. 초기 벤치마킹은 성능 오버헤드를 최소화하면서 모든 테스트된 최적화 수준에서 상수 속성을 100% 보존하고 주요 암호 라이브러리와 성공적으로 통합함을 확인했습니다. 향후 계획으로는 분기 없이 전체 표현식을 평가하도록 강제하는 __builtin_ct_expr 같은 추가 내재 지원 확장과 LLVM을 대상으로 하는 Rust, Swift, WebAssembly 같은 언어에서의 채택 지원이 포함됩니다.
Trail of Bits는 널리 사용되는 JavaScript 라이브러리인 elliptic에서 두 가지 취약점을 공개적으로 발표합니다. Wycheproof 테스트 도구를 사용하여 발견된 이 취약점들은 매주 수백만 번 다운로드되는 라이브러리에 영향을 미칩니다. 한 가지 취약점은 서명 구성 요소가 허용된 범위 내에 있는지 확인하지 못하여 EdDSA 서명 가변성을 허용합니다. 이는 공격자가 알려진 메시지 쌍에 대해 유효한 서명을 위조할 수 있게 합니다. 두 번째 취약점인 CVE-2024-48948은 ECDSA 서명 검증에 영향을 미칩니다. 메시지 해시에 선행 0이 있는 경우 유효한 서명이 검증에 실패하게 만듭니다. 이는 라이브러리가 숫자 객체로 변환 후 해시 크기를 잘못 계산하기 때문에 발생합니다. 이 잘못된 계산으로 인해 해시가 부적절하게 잘려 올바른 검증을 방해합니다. 이러한 중요한 취약점 중 하나는 2024년 10월에 90일 공개 기간이 종료되었음에도 불구하고 수정되지 않은 상태로 남아 있습니다. Trail of Bits는 암호화 라이브러리에 대해 Wycheproof와 같은 도구를 사용한 지속적인 테스트의 중요성을 강조합니다. 공개 프로세스는 GitHub 권고를 통해 라이브러리 유지 관리자에게 비공개로 보고하는 방식으로 진행되었습니다. EdDSA 문제는 즉시 해결되었지만 ECDSA 문제는 대응이 지연되었습니다. 이번 발견은 elliptic 라이브러리에 의존하는 프로젝트에 대한 심각한 보안 영향을 강조합니다.
CdXz5zHNQW_IE7PHTX85O.png