[논문 리뷰] You Really Shouldn't Roll Your Own Crypto: An Empirical Study of Vulnerabilities in Cryptographic Libraries
이 경험적 연구는 8개의 주요 암호화 라이브러리에서 300개 이상의 취약성을 분석하여, 이 중 37.2%는 암호학적 결함이 아니라 메모리 안전성 문제이며, 특히 C/C++에서의 코드 복잡성이 취약성의 주요 원인임을 밝혀냈다. 연구는 암호화 소프트웨어가 비암호화 시스템보다 훨씬 높은 취약성 비율을 보이며, 평균 악용 가능 수명이 4.18년에 이르고, OpenSSL에서는 1,000줄당 최소 한 건의 취약성이 발생함을 확인하여 '자신만의 암호를 만들지 말 것'이라는 경고를 뒷받iesen한다.
The security of the Internet rests on a small number of open-source cryptographic libraries: a vulnerability in any one of them threatens to compromise a significant percentage of web traffic. Despite this potential for security impact, the characteristics and causes of vulnerabilities in cryptographic software are not well understood. In this work, we conduct the first comprehensive analysis of cryptographic libraries and the vulnerabilities affecting them. We collect data from the National Vulnerability Database, individual project repositories and mailing lists, and other relevant sources for eight widely used cryptographic libraries. Among our most interesting findings is that only 27.2% of vulnerabilities in cryptographic libraries are cryptographic issues while 37.2% of vulnerabilities are memory safety issues, indicating that systems-level bugs are a greater security concern than the actual cryptographic procedures. In our investigation of the causes of these vulnerabilities, we find evidence of a strong correlation between the complexity of these libraries and their (in)security, empirically demonstrating the potential risks of bloated cryptographic codebases. We further compare our findings with non-cryptographic systems, observing that these systems are, indeed, more complex than similar counterparts, and that this excess complexity appears to produce significantly more vulnerabilities in cryptographic libraries than in non-cryptographic software.
연구 동기 및 목표
- 광범위하게 사용되는 암호화 라이브러리의 취약성의 근본 원인을 경험적으로 평가하기.
- 암호화 소프트웨어에서 코드 복잡성과 취약성 빈도 간의 관계를 조사하기.
- 암호화 시스템과 비암호화 시스템 간의 취약성 비율과 특성 비교하기.
- 법률 집행 기관을 위한 암호화의 '예외적 접근' 메커니즘의 보안 영향 평가하기.
- 오랫동안 주장되어 온 보안 원칙인 '자신만의 암호를 만들지 말 것'을 데이터 기반으로 뒷받침하기.
제안 방법
- 국립취약점데이터베이스(NVD), GitHub 저장소, 메일링 리스트, 버그 트래커에서 8개의 주요 암호화 라이브러리에 대한 취약성 데이터를 수집하였다.
- NVD 정의와 수작업 레이블링을 활용해 취약성 유형(예: 암호학적, 메모리 안전성, 자원 관리 등)으로 분류하였다.
- 코드베이스 크기와 순환 복잡도를 측정하여 소프트웨어 복잡도를 평가하고, 이와 취약성 빈도 간의 상관관계를 분석하였다.
- 첫 공개 공개일부터 패치 배포 시점까지의 시간을 분석하여 취약성 수명 주기를 추적하였다.
- OpenSSL, GnuTLS 등 암호화 라이브러리와 웹 브라우저, 운영체제 구성요소 등 비암호화 시스템의 취약성 비율을 비교하여 상대적 위험도를 평가하였다.
- LibreSSL와 BoringSSL 파생 라이브러리를 사례 연구하여 소스 코드 감소가 취약성 감소에 미치는 영향을 분석하였다.
실험 결과
연구 질문
- RQ1암호화 라이브러리의 취약성 중 암호학적 결함과 시스템 수준의 구현 문제로 인한 비율은 각각 얼마인가?
- RQ2크기와 순환 복잡도로 측정한 코드 복잡성이 암호화 소프트웨어의 취약성 빈도와 어떻게 상관관계가 있는가?
- RQ3암호화 라이브러리의 취약성 비율과 수명 주기는 비암호화 시스템과 비교해 어떻게 다른가?
- RQ4OpenSSL와 같은 주요 암호화 라이브러리에서 1줄당 취약성 도입 비율은 얼마인가?
- RQ5LibreSSL, BoringSSL와 같이 파생 라이브러리를 통해 코드베이스 크기를 줄일 경우, 이로 인해 취약성 감소가 얼마나 측정 가능한가?
주요 결과
- 암호화 라이브러리의 취약성 중 암호학적 문제는 27.2%에 불과하지만, 메모리 안전성 또는 자원 관리 버그는 37.2%를 차지한다.
- 암호화 라이브러리에서 취약성의 중앙값 악용 가능 수명은 4.18년으로, 공격자가 장기간 노출된 상태로 악용할 수 있음을 시사한다.
- OpenSSL에서는 1,000줄의 코드 추가당 최소 한 건의 취약성이 발생하며, 비암호화 소프트웨어 대비 최대 3배 높은 취약성 비율을 보인다.
- 암호화 소프트웨어는 비암호화 시스템보다 훨씬 높은 코드 복잡도를 보이며, 이 복잡성이 취약성 빈도 증가와 강하게 상관관계가 있다.
- LibreSSL와 BoringSSL와 같은 파생 라이브러리는 소스 코드 감소와 취약성 감소 사이에 선형 관계를 보이며, 더 단순한 코드베이스가 더 안전하다는 가설을 뒷받침한다.
- 연구는 복잡성이 암호화 소프트웨어의 보안에 있어서 암호학적 설계 결함보다 더 큰 위협임을 경험적으로 입증하며, '자신만의 암호를 만들지 말 것'이라는 원칙을 강화한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.