하위리소스무결성(SRI) (Subresource Integrity)
쉽게 풀면
하위리소스무결성은 외부 서버에서 파일을 가져올 때 그 파일이 원래 예상한 내용과 정확히 일치하는지 확인하는 봉인 검사와 같습니다. 택배 상자에 봉인 스티커가 붙어 있으면 중간에 뜯겼는지 확인할 수 있는 것처럼, 웹페이지가 외부 콘텐츠 배포망에서 스크립트 파일을 불러올 때 미리 지정해둔 해시값과 실제 받은 파일의 해시값을 비교하여 다르면 실행을 거부합니다. 이를 통해 외부 서버가 해킹되어 파일이 변조되더라도 사용자 브라우저에서 그 변조된 코드가 실행되는 것을 막을 수 있습니다.
왜 중요한가
많은 웹사이트가 외부 콘텐츠 배포망에서 공용 라이브러리를 불러와 사용하는데, 이 지점이 공급망 공격의 경로가 될 수 있어 하위리소스무결성은 정보보안학에서 공급망 보안 연구의 한 축으로 다뤄집니다. 외부 CDN이 해킹되거나 중간자 공격으로 스크립트가 변조되더라도, 웹사이트 운영자가 직접 서버를 통제하지 않는 리소스에 대해서도 위변조 여부를 검증할 수 있는 방어 수단을 제공합니다.
논문에서는 이렇게 쓰입니다
실제 웹사이트들의 SRI 적용 실태를 조사한 연구 사례입니다.
공급망 침해 시나리오에서 SRI의 방어 효과를 검증한 연구 사례입니다.
조금 더 깊게 보면
하위리소스무결성은 스크립트나 스타일시트 태그에 암호학적 해시값을 지정하는 방식으로 적용되며, 브라우저는 파일을 내려받은 뒤 해시를 계산하여 지정된 값과 비교합니다. 값이 일치하지 않으면 브라우저는 해당 리소스의 실행이나 적용을 차단합니다. SRI는 스크립트나 스타일시트 태그의 integrity 속성에 파일의 해시값을 기재해, 브라우저가 리소스를 로드하기 전에 실제 받아온 파일의 해시를 계산하고 비교하도록 하며, 값이 일치하지 않으면 실행을 차단합니다.
주의할 점
외부 파일이 자주 갱신되는 경우 해시값도 함께 갱신해야 하므로, 관리가 소홀하면 정상적인 업데이트임에도 리소스가 차단될 수 있습니다. 리소스 파일이 자주 갱신되는 서비스에 SRI를 적용하면 해시값이 맞지 않아 정상적인 업데이트조차 차단될 수 있어, 버전이 고정된 리소스에 한해 사용하는 것이 일반적으로 권장됩니다.