security.txt는 IETF(인터넷 엔지니어링 태스크 포스)가 RFC 9116에서 공식으로 표준화한 웹 보안 모범 사례로, 웹사이트가 보안 연락처 정보를 공개하는 통일되고 표준적인 방법을 제공하기 위한 것입니다. 간단히 말해, 웹사이트의 고정된 경로에 위치하는 텍스트 파일로, 보안 연구원(화이트햇 해커)에게 다음과 같이 알려줍니다: "내 웹사이트에서 보안 취약점을 발견하셨다면, 여기가 우리에게 연락하는 방법입니다. 여기가 우리의 암호화 공개키이고, 여기가 우리의 공개 정책입니다. 당신의 보고를 환영합니다."
security.txt 표준이 나오기 전에는 웹사이트의 보안 연락처 정보가 제각각이었습니다. 보안 연락처가 전혀 없는 웹사이트도 있었고, 구석진 페이지에 숨겨둔 곳도 있었고, 아무도 보지 않는 info@ 메일만 남겨둔 곳도 있었고, LinkedIn에서 힘들게 찾아야 보안 팀에 연락할 수 있는 곳도 있었습니다. 이는 심각한 문제를 초래했습니다: 선의의 보안 연구원이 취약점을 발견해도 올바른 채널을 찾아 보고할 수 없다는 점이었습니다. 그 결과—많은 취약점이 그대로 방치되어 수정되지 않다가 악의적인 해커가 발견하여 악용하는 경우가 많았습니다. security.txt는 바로 이 "마지막 마일" 문제를 해결하기 위해 탄생했습니다.
security.txt 개념은 보안 연구원 EdOverflow와 Yakov Shafranovich가 2017년에 처음 제안했으며, 업계의 광범위한 지지를 빠르게 얻었습니다. 2022년 4월, security.txt는 IETF에 의해 RFC 9116 표준으로 공식 승인되어 국제적으로 인정된 웹 보안 표준이 되었습니다. 현재 Google, GitHub, Meta(Facebook), LinkedIn, Cloudflare 등 대형 IT 기업과 영국 정부, 미국 CISA(사이버보안 및 기반시설 보안국), 프랑스 정부, 이탈리아 정부, 네덜란드 정부, 호주 사이버보안센터 등 정부 기관이 공식 웹사이트에 security.txt를 배포했으며 다른 조직에서도 채택할 것을 공개적으로 권장하고 있습니다.
security.txt 파일의 핵심 디자인은 매우 간결합니다—순수한 텍스트 파일로, 일련의 "필드명: 값" 행으로 구성되어 HTTP 헤더와 유사한 형식입니다. 표준은 두 개의 필수 필드(Contact: 보안 연락처, 여러 개 지정 가능; Expires: 파일 만료 시간)와 여러 선택적 필드(Encryption: PGP 암호화 공개키 URL; Acknowledgments: 감사 페이지 URL; Policy: 취약점 공개 정책 URL; Hiring: 보안 채용 URL; Canonical: 파일 정규 URL; Preferred-Languages: 지원하는 보고 언어; CSAF: 보안 권고 프레임워크 메타데이터 URL)를 정의합니다. 이러한 간단한 형식은 사람과 기계 모두 쉽게 파싱할 수 있게 합니다.
security.txt 배포가 왜 그렇게 중요할까요? 첫째, 취약점 보고의 장벽을 낮춥니다. 보안 연구원이 연락처를 찾는 데 많은 시간을 소비할 필요 없이 한 번에 올바른 보고 채널을 찾을 수 있습니다. 둘째, 조직의 보안에 대한 적극적인 태도를 보여줍니다—security.txt가 있는 웹사이트는 "우리는 보안을 중시하며 책임 있는 보고를 환영합니다"라고 말하는 것과 같습니다. 셋째, 취약점이 공개적으로 공개되거나 악용될 위험을 줄입니다: 연구원이 정식 채널을 가지면 연락이 닿지 않아 Twitter나 GitHub에 취약점을 직접 공개하는 선택을 하지 않을 것입니다. 넷째, 많은 산업 규제 요건(금융, 의료, 정부 등)에서 취약점 공개 채널 구축은 컴플라이언스 요건이 되었습니다.
security.txt를 배포할 때 주의해야 할 몇 가지 핵심 세부 사항이 있습니다. 첫째, 경로가 정확해야 합니다: 표준 경로는 /.well-known/security.txt이며, 폴백으로 루트 디렉터리 /security.txt에 하나 더 배치할 수 있습니다. 여기서 .well-known 디렉터리는 RFC 8615가 정의한 표준 "알려진 리소스" 디렉터리이며, robots.txt 등 다른 표준 파일도 관련 위치에 배치됩니다. 둘째, HTTPS를 통해 제공해야 하며, 평문 HTTP는 안전하지 않은 것으로 간주됩니다. 셋째, Content-Type은 text/plain이어야 하며, text/html이나 다른 유형이면 안 됩니다. 넷째, security.txt에 대해 교차 도메인 리디렉션을 수행하지 마세요—https://example.com/.well-known/security.txt가 https://other-domain.com/security.txt로 리디렉션되면 연구원과 자동화 도구는 이를 의심스러운 것으로 간주합니다. 다섯째, Expires 필드를 설정하고 정기적으로 업데이트하는 것을 잊지 마세요. 만료된 security.txt는 정보가 신뢰할 수 없는 것으로 간주됩니다.
Contact 필드는 security.txt에서 가장 중요한 필드이며, 진정으로 필수 불가결한 유일한 필드입니다(Expires도 필수이지만 타임스탬프일 뿐입니다). Contact는 세 가지 URI 형식을 지원합니다: mailto:는 메일 주소에 사용하고, https://는 웹 링크(예: 보안 보고 양식 페이지)에 사용하며, tel:는 전화번호에 사용합니다. 최소한 하나의 mailto 메일과 하나의 https 양식 링크를 제공할 것을 강력히 권장합니다—양식은 봇 스팸 메일을 방지할 수 있고, 메일은 연구원이 암호화된 보고서를 직접 보내기에 더 편리합니다. 여러 연락처를 여러 행으로 나열할 수 있으며, 예를 들어 보안 팀 메일, 보안 책임자 메일, 제3자 취약점 플랫폼 링크 등을 동시에 제공할 수 있습니다.
Encryption 필드는 선택 사항이지만 실제 운영에서 매우 중요합니다. 보안 연구원이 심각한 취약점(예: 사용자 데이터 유출, 원격 코드 실행)을 발견했을 때, 그들은 평문 메일로 취약점 세부 사항을 보내는 것을 절대 원하지 않을 것입니다—메일은 전송 과정에서 여러 서버를 거치며 어느 한 구간에서도 도청될 수 있기 때문입니다. PGP(Pretty Good Privacy) 공개키 암호화는 업계 표준의 안전한 통신 방식입니다. PGP 키 쌍을 생성하여 공개키를 웹사이트에 배치하고(예: /.well-known/pgp-key.txt), 이 URL을 Encryption 필드에 입력하기만 하면 됩니다. 연구원이 귀하의 공개키로 보고 내용을 암호화하면 해당 개인키를 소지한 사람만 복호화하여 읽을 수 있습니다.
Policy 필드는 귀하의 취약점 공개 정책(Vulnerability Disclosure Policy, VDP) 페이지로 링크되며, 이는 연구원의 신뢰를 구축하는 핵심입니다. 좋은 VDP에는 다음 내용이 명확히 설명되어야 합니다: 테스트 범위(어떤 시스템이 테스트 범위에 포함되고 어떤 시스템이 포함되지 않는지), 허용되는 테스트 방법(예: SQL 인젝션/XSS 테스트는 허용하지만 DDoS/사회 공학/실제 사용자 데이터 접근은 금지), 응답 시간 약속(예: "3영업일 이내에 보고서 수신을 확인하겠습니다"), 버그 바운티 제공 여부, 법적 세이프 하버 약속(규칙을 준수하는 선의의 연구원을 기소하지 않을 것을 명시) 등. 국제적으로 참고할 수 있는 VDP 템플릿이 많이 있으며, 미국 CISA도 오픈소스 VDP 템플릿을 제공하고 있습니다.
보안 연락처 자체 외에도 security.txt에는 몇 가지 "깜짝" 필드가 있습니다. Acknowledgments 필드는 보안 명예의 전당(Hall of Fame)을 구축합니다—귀하가 취약점을 발견하도록 도와준 연구원을 공개적으로 감사하는 것으로, 그들의 노력을 인정하고 커뮤니티를 구축하는 방식입니다. Hiring 필드는 매우 영리한 디자인입니다: 귀하 웹사이트의 취약점을 발견할 수 있는 사람은 그 자체로 우수한 보안 인재이며, security.txt에 채용 링크를 넣는 것은 가장 정확한 보안 인재 채용 채널입니다. 많은 기업이 security.txt를 통해 우수한 보안 엔지니어를 채용했습니다. Canonical 필드는 보안 고려 사항입니다—공격자가 다른 도메인에서 귀하의 security.txt를 위조하는 것을 방지합니다.
흔한 스팸 메일 우려에 대해, 실제로 security.txt를 이미 배포한 대부분의 조직에서 스팸 메일 증가는 미미하다는 피드백을 받고 있습니다. 그 이유는 다음과 같습니다: 첫째, 스팸 발송자는 보통 security.txt를 크롤링하여 메일 주소를 얻지 않습니다; 둘째, 직접 mailto 메일을 넣는 대신 https:// 양식 링크를 사용하고 양식에 캡차를 추가하면 봇을 완전히 차단할 수 있습니다; 셋째, 전용 보안 메일(예: security@)은 보통 엄격한 스팸 필터를 구성합니다. 이에 비해 보안 연락 채널이 부족하여 심각한 취약점 보고를 놓치는 대가는 스팸 메일이 약간 증가하는 것보다 훨씬 큽니다.
본 생성기는 RFC 9116 표준을 엄격히 준수하여 구축되었으며, 모든 출력 형식은 정규화 처리되었습니다: Contact 필드는 접두사를 자동으로 인식하고, Expires 필드는 표준 ISO 8601 UTC 시간 형식을 사용하며, Preferred-Languages는 사용 중인 언어에 따라 자동으로 설정됩니다. 생성된 내용은 복사하여 /.well-known/security.txt 경로에 바로 배포할 수 있으며 어떤 수정도 필요하지 않습니다. 또한 모든 구성은 브라우저 로컬에서 완료되며 어떤 서버에도 전송되지 않습니다—귀하의 보안 연락처 정보는 항상 귀하의 기기에 저장됩니다. security.txt 배포는 5분밖에 걸리지 않지만, 그것이 구축하는 보안 의사소통 채널은 미래에 심각한 보안 사고를 피하는 데 도움이 될 수 있습니다.