하위 리소스 무결성(SRI) 및 SRI 해시 계산기로 웹 애플리케이션 보안 강화하기
현대 웹 개발에서 모든 것을 처음부터 직접 만드는 경우는 드뭅니다. 우리는 React, Vue 또는 Bootstrap과 같은 즐겨 찾는 라이브러리를 호스팅하기 위해 콘텐츠 전송 네트워크(CDN)에 의존합니다. 그러나 이러한 의존성에는 위험이 따릅니다. 만약 CDN이 해킹당하고 로드 중인 스크립트가 악성 코드로 교체된다면 어떻게 될까요?
이때 필요한 것이 바로 **하위 리소스 무결성(SRI)**입니다. 이 가이드에서는 SRI의 작동 원리와 사용자의 안전을 지키기 위해 SRI 해시 계산기를 사용하는 방법을 설명합니다.
1. 하위 리소스 무결성(SRI)이란 무엇인가요?
하위 리소스 무결성(SRI)은 브라우저가 가져온 리소스(예: CDN의 리소스)가 예기치 않은 조작 없이 전달되었는지 확인할 수 있도록 하는 보안 기능입니다.
작동 원리
HTML에 리소스를 포함할 때 integrity 속성에 해당 리소스의 암호화 해시를 제공합니다. 그러면 브라우저는 다음과 같이 동작합니다.
- 리소스를 가져옵니다.
- 가져온 리소스의 해시를 계산합니다.
- 제공된 해시와 비교합니다.
- 일치하면 리소스가 실행됩니다. 일치하지 않으면 브라우저가 리소스를 차단합니다.
HTML 구문
<script src="https://example.com/example-framework.js"
integrity="sha384-Li9vy3DqF8tnTXuiaAJuML3ky+er10rcOtpguf4Dez6GdrJCT9Wo+SWax9fEE99l"
crossorigin="anonymous"></script>
2. SRI 해시 계산기 사용하기
SRI를 구현하려면 로드하려는 파일의 정확한 암호화 해시가 필요합니다. SRI 해시 계산기는 이 과정을 자동화합니다.
SRI를 위한 일반적인 해시 알고리즘
- SHA-256: 안전하지만 해시 길이가 약간 짧습니다.
- SHA-384: SRI에 가장 일반적으로 권장되는 알고리즘입니다(보안과 길이의 균형).
- SHA-512: 가장 안전하며 해시 길이가 더 깁니다.
SRI 해시 생성 단계
- 파일 제공: 스크립트의 로컬 버전을 업로드하거나 CDN 자산의 URL을 제공합니다.
- 알고리즘 선택: SHA-256, SHA-384, SHA-512 중에서 선택합니다.
- 생성: 도구가 알고리즘 이름으로 시작하는 문자열을 생성합니다(예:
sha384-...). - 복사 및 붙여넣기: 결과 문자열을 스크립트 또는 링크 태그의
integrity속성에 삽입합니다.
3. 현대 웹 보안에서 SRI가 중요한 이유
CDN 해킹에 대한 방어
대규모 CDN이 해킹당하더라도 SRI는 사이트를 안전하게 유지합니다. 악성 코드는 사용자의 해시와 일치하지 않으며, 브라우저는 단순히 실행을 거부합니다.
규정 준수 및 신뢰
SRI 사용은 OWASP와 같은 보안 기관에서 권장하는 모범 사례입니다. 이는 사용자 및 고객에게 귀하가 데이터 보안을 진지하게 고려하고 있음을 보여줍니다.
"중간자 공격(MITM)" 방지
SRI는 통신 트래픽에 악성 코드를 주입하려는 공격자로부터 공용 Wi-Fi와 같이 보안이 취약한 네트워크의 사용자를 보호합니다.
4. SRI 실패 해결 방법
리소스 로드에 실패하면 콘솔에 다음과 같은 오류 메시지가 표시될 수 있습니다.
None of the "integrity" hashes in the "integrity" attribute match the content of the subresource. ("integrity" 속성의 어떤 무결성 해시도 하위 리소스의 내용과 일치하지 않습니다.)
일반적인 원인:
- 잘못된 해시: 해시를 생성할 때 잘못된 버전의 파일을 사용했습니다.
crossorigin속성 누락: 교차 출처(cross-origin) 요청에서 SRI가 작동하려면crossorigin="anonymous"속성이 필수입니다.- CDN 압축: 일부 CDN은 파일 내용(예: 즉석 미니피케이션 또는 압축)을 수정할 수 있으며, 이 경우 해시가 변경됩니다. 브라우저가 수신하는 것과 정확히 일치하는 내용을 해싱했는지 확인하세요.
SRI 모범 사례 요약
| 조치 | 이유 |
|---|---|
| SHA-384 사용 | 속도와 보안의 균형을 맞춘 업계 표준. |
항상 crossorigin 추가 |
교차 사이트 SRI 검증에 필수적입니다. |
| 제3자 스크립트 감사 | 신뢰할 수 있는 소스의 스크립트에만 SRI를 사용하세요. |
| 해시 생성 자동화 | 수동 입력 오류를 방지하기 위해 SRI 계산기를 사용하세요. |
결론
하위 리소스 무결성은 웹 애플리케이션의 보안을 획기적으로 향상시킬 수 있는 강력하고 비용 효율적인 방법입니다. 배포 프로세스의 일부로 SRI 해시 계산기를 사용하면 현대 웹에서 가장 일반적인 공격 경로 중 하나로부터 사이트와 사용자를 보호할 수 있습니다.
FAQ: 자주 묻는 질문
Q: 내 내부 스크립트에도 SRI를 사용할 수 있나요?
A: 네, 제3자 스크립트만큼 중요하지는 않지만 빌드 프로세스 중에 유용한 무결성 검사 역할을 할 수 있습니다.
Q: CDN이 스크립트 버전을 업데이트하면 어떻게 되나요?
A: 파일 내용이 한 글자라도 변경되면 해시가 변경됩니다. 스크립트 버전을 업데이트할 때마다 integrity 속성도 업데이트해야 합니다.
Q: SRI가 페이지 로딩 속도를 늦추나요?
A: 성능 영향은 미미합니다. 현대 브라우저는 스크립트를 이미 처리하는 동안 해시를 매우 빠르게 계산합니다.