
제한 사항 부족을 악용하여 디스크 플러딩 공격을 가능하게 하는 중요한 IndexedDB 취약점을 노출하는 PoC.

IFA는 인기 있는 웹 브라우저에서 IndexedDB API를 악용하여 디스크 플러딩 공격을 수행할 수 있는 방법을 보여주는 개념 증명(PoC)입니다. 이 공격은 특히 IndexedDB의 제한 부족을 활용하여 브라우저가 효과적인 제한 없이 데이터를 저장할 수 있게 하여, 초당 수백 MB를 주입함으로써 사용자의 디스크 공간을 빠르게 소모시킵니다. 이로 인해 시스템 성능이 크게 저하되고, 저장 공간이 고갈되며, 극단적인 경우 시스템 전체가 충돌할 수 있습니다.
생산성과 엔터테인먼트를 위해 웹 애플리케이션에 점점 더 의존하는 세상에서, 단 몇 분 만에 장치를 사용할 수 없게 만드는 취약점은 심각한 위협입니다. IFA는 IndexedDB의 제한 부족이 어떻게 악용되어 사용자가 간단한 스크립트로 인해 시스템 제어권을 잃는 시나리오를 만들 수 있는지 보여줍니다.
IFA를 실행하면 다음과 같은 파괴적인 효과가 발생할 수 있습니다:
대규모 성능 저하: IndexedDB에 대량의 데이터를 지속적으로 저장하면 디스크의 입출력 작업이 포화되어 시스템 속도가 크게 저하됩니다. 사용자는 매우 느린 응답 시간을 경험하여 장치를 정상적으로 사용하기 어려워집니다.
빠른 저장 공간 고갈: 몇 분 안에 공격이 수 기가바이트의 디스크 공간을 소모할 수 있습니다. 저장 공간이 고갈되면 시스템은 문서 저장, 업데이트 설치, 새 애플리케이션 열기와 같은 기본 작업조차 수행할 수 없게 됩니다.
시스템 불안정 및 충돌: 디스크가 완전히 가득 차면 운영 체제가 불안정해지거나 충돌하여 저장되지 않은 데이터가 손실되고 중요한 시스템 파일이 손상될 수 있습니다. 영향을 받은 사용자는 시스템 복원 또는 운영 체제 완전 재설치가 필요할 수 있습니다.
IFA는 다양한 브라우저에 영향을 미칩니다:
IFA는 IndexedDB API의 제한 부족을 악용하기 위해 신중하게 설계된 전략을 사용하여, 공격의 영향을 극대화하면서 브라우저가 조기에 충돌하는 것을 방지합니다:
고유 식별자 생성: 스크립트는 무작위 이름의 여러 데이터베이스를 생성하여 충돌을 방지하고 각 데이터베이스가 많은 양의 데이터를 저장할 수 있도록 합니다.
8 MB Blob 주입: IFA는 반복되는 텍스트와 이미지 데이터로 구성된 8 MB Blob(대용량 데이터 조각)을 사용합니다. 이 크기 선택은 브라우저를 즉시 충돌시키지 않으면서도 대용량 데이터를 효율적으로 저장할 수 있게 하여 중요합니다. 특정 크기의 Blob을 사용함으로써 IFA는 브라우저 탭의 메모리 버퍼 기반 보안 메커니즘을 회피하여, 과도하거나 빠른 쓰기 작업이 감지되면 공격을 중단시킬 수 있는 메커니즘을 회피하면서 일관되고 지속적으로 사용자의 디스크를 플러딩할 수 있습니다.
데이터 저장 루프: 8 MB Blob이 IndexedDB 객체에 반복적으로 저장되어 디스크 공간을 빠르게 채우는 지속적인 데이터 흐름을 생성합니다. IFA는 초당 수백 MB를 주입하여 사용자의 저장 공간을 빠르게 소모하면서도 브라우저의 즉각적인 충돌을 방지합니다.
디스크 포화: 이 프로세스는 디스크 공간이 소진될 때까지 무한정 계속되어 시스템을 마비시킬 수 있는 일련의 문제를 초래합니다.
IFA 익스플로잇은 IndexedDB API의 심각한 취약점이 어떻게 무기화될 수 있는지 보여줍니다. 공격자가 이 PoC를 활용하여 심각한 피해를 입힐 수 있는 몇 가지 시나리오는 다음과 같습니다:
크로스 사이트 스크립팅(XSS)을 통한 악용: 공격자가 합법적인 웹사이트에서 XSS 취약점을 발견하면, IFA 스크립트를 해당 사이트에 주입할 수 있습니다. 사용자가 손상된 페이지를 방문하면 스크립트가 브라우저에서 자동으로 실행되어 디스크 공간을 빠르게 채웁니다. 이로 인해 특히 공격을 인지하지 못한 사용자의 경우 시스템 속도가 크게 저하되거나 충돌이 발생할 수 있습니다.
손상된 타사 JavaScript 라이브러리: 많은 웹사이트와 웹 애플리케이션이 타사 JavaScript 라이브러리에 의존합니다. 공격자가 이러한 라이브러리 중 하나를 손상시켜 IFA 스크립트를 주입하면, 해당 라이브러리를 사용하는 모든 웹사이트가 무의식적으로 공격 벡터가 될 수 있습니다. 이로 인해 손상된 스크립트를 로드하는 모든 사용자 장치에서 광범위한 디스크 플러딩이 발생합니다.
악성 브라우저 확장 프로그램: 공격자는 IFA 스크립트를 포함하는 브라우저 확장 프로그램을 개발하거나 손상시킬 수 있습니다. 설치 후 확장 프로그램은 백그라운드에서 조용히 스크립트를 실행하여 사용자가 브라우저를 열 때마다 디스크 공간을 플러딩합니다. 브라우저 확장 프로그램은 종종 광범위한 권한을 가지므로 이 시나리오는 특히 위험합니다.
감염된 웹 광고: 공격자는 합법적인 웹사이트에 IFA 스크립트가 포함된 악성 광고를 게재할 수 있습니다. 사용자가 감염된 광고가 있는 페이지를 로드하면 스크립트가 실행되어 디스크 공간을 소모하기 시작합니다. 이 방법은 특히 트래픽이 많은 웹사이트에서 많은 사용자를 대상으로 할 수 있습니다.
피싱 캠페인: 공격자는 피싱 이메일을 보내 피해자를 IFA 스크립트를 호스팅하는 웹사이트로 유도할 수 있습니다. 대상이 악성 웹사이트를 방문하면 스크립트가 실행되어 디스크 공간을 채우기 시작합니다. 이 방법은 개인이나 조직을 대상으로 한 표적 공격에 특히 효과적일 수 있습니다.
IFA의 영향을 더 잘 이해할 수 있도록 전용 웹사이트에 데모를 만들었습니다. 이 웹 데모는 익스플로잇이 어떻게 작동하는지 쉽게 확인하고 잠재적 효과를 파악할 수 있도록 설계되었습니다.
라이브 데모 탐색: https://ifa.run을 방문하여 라이브 데모를 경험해보세요. 이 데모를 통해 이 공격이 브라우저와 시스템에 어떤 영향을 미칠 수 있는지 직접 확인할 수 있습니다. 누구나 쉽게 익스플로잇의 결과를 테스트하고 확인할 수 있도록 이 데모를 만들었습니다. 테스트는 주의를 기울여 통제된 환경에서 수행하시기 바랍니다.
숨겨진 주입 데모: 더 은밀한 데모를 원하신다면 https://ifa.run/hidden.html을 방문하세요. 이 버전은 메인 데모와 같은 가시적인 그래픽이나 사용자 인터페이스 없이 보이지 않게 작동하며 직접 주입을 수행합니다.
PoC 동영상 시청: 설명이 포함된 안내를 원하신다면 데모 동영상도 준비했습니다. 동영상에서 IFA의 실행 과정을 안내하고 발생시키는 효과를 보여드립니다: PoC 동영상.
로컬에서 PoC를 테스트하고 싶다면 다음과 같은 간단한 단계를 따르세요. IFA.js 스크립트를 포함하고 사용자 정의 데이터로 익스플로잇을 실행하는 방법을 안내합니다.
먼저 HTML 파일에 IFA.js 스크립트를 포함해야 합니다. 두 가지 옵션이 있습니다:
<script src="IFA.js"></script>
<script src="https://cdn.jsdelivr.net/gh/jofpin/IFA/IFA.js"></script>
CDN 링크를 사용하면 스크립트를 직접 호스팅할 필요 없이 다양한 웹사이트나 웹 애플리케이션에서 익스플로잇을 테스트하는 데 특히 유용합니다.
스크립트를 포함하면 익스플로잇을 실행할 준비가 된 것입니다. IFA 스크립트를 사용하면 주입될 데이터를 사용자 정의할 수 있습니다. 방법은 다음과 같습니다:
Base64 이미지 삽입: 이미지를 Base64 형식으로 변환하여 img 필드에 삽입합니다.
사용자 정의 텍스트 삽입: txt 필드에 사용할 텍스트를 입력합니다.
다음은 익스플로잇을 실행하는 예제입니다:
IFA.run({
img: "data:image/webp;base64,UklGRpZBAwBXRUJQV...", // Insert your Base64 image here
txt: "IFA" // Insert your custom text
});
img: Base64로 인코딩된 이미지를 넣는 곳입니다. 이미지가 직접 주입되어 외부 서버 요청을 피함으로써 익스플로잇이 더 빠르고 효율적으로 실행됩니다.
txt: 데이터베이스에 저장될 텍스트를 입력하는 곳입니다. 다양한 시나리오를 테스트하기 위해 이 텍스트를 사용자 정의할 수 있습니다.
스크립트를 실행한 후 익스플로잇이 어떻게 동작하는지 관찰하세요. 다음을 확인할 수 있습니다:
디스크 공간 사용량: 스크립트가 IndexedDB에 지속적으로 데이터를 쓰면서 디스크 공간이 빠르게 채워집니다.
시스템 성능: 응답 시간이 느려지고 잠재적 불안정성을 동반한 상당한 시스템 성능 저하가 관찰될 수 있습니다.
브라우저 동작: 익스플로잇은 브라우저를 즉시 충돌시키지 않고 공격을 지속하여 결국 디스크를 가득 채웁니다.
통제된 환경 사용: 이 PoC는 시스템 불안정을 초래할 수 있으므로 통제된 환경에서 테스트하세요.
Base64 인코딩: 이미지에 Base64를 사용하면 주입이 로컬에서 처리되어 잠재적 오류를 방지하고 익스플로잇을 더 효과적으로 만듭니다.
이 취약점의 노출은 브라우저 개발자에게 경각심을 불러일으켜야 합니다. 이러한 공격을 방지하기 위해 구현할 수 있는 몇 가지 조치는 다음과 같습니다:
할당량 한도 구현: 브라우저는 웹 애플리케이션이 IndexedDB를 통해 사용할 수 있는 저장 공간의 양에 엄격한 제한을 설정해야 합니다. 이는 악성 스크립트가 모든 디스크 공간을 소모하는 것을 방지합니다.
비정상 행동 탐지: 브라우저는 대규모 데이터베이스 생성이나 짧은 시간에 대량의 데이터를 저장하는 것과 같은 비정상 행동을 탐지하고 차단하는 메커니즘을 개발해야 합니다.
사용자 경고: 비정상적인 저장 공간 사용이 감지되면 브라우저는 사용자에게 경고하고 취약점을 악용하려는 애플리케이션을 차단할 수 있는 옵션을 제공해야 합니다.
IFA의 생성은 우리가 매일 사용하는 웹 기술을 보호하기 위해 필요한 조치를 취하지 않을 경우 어떤 일이 일어날 수 있는지 보여주기 위한 노력입니다. IFA는 단순한 기술적 데모가 아니라 전체 기술 산업에 대한 경고입니다: 혁신을 추구하는 과정에서 보안을 타협해서는 안 됩니다.
코드는 구축하거나 파괴할 수 있는 힘을 가지고 있습니다. 우리의 유산이 파괴가 아닌 구축이 되도록 합시다. - Jose Pino
이 PoC는 교육 및 연구 목적으로만 제공됩니다. 실행은 통제된 환경에서 이루어져야 하며, 중요 데이터가 포함된 프로덕션 시스템이나 장치에서 사용해서는 안 됩니다. 이 PoC의 오용은 심각한 손상을 초래할 수 있으며, 윤리적으로 사용되도록 하는 것은 사용자의 책임입니다.
이 프로젝트의 콘텐츠는 Creative Commons Attribution 3.0 license에 따라 라이선스가 부여되며, 해당 콘텐츠를 형식화하고 표시하는 데 사용된 기본 소스 코드는 MIT license에 따라 라이선스가 부여됩니다.
Copyright (c) 2024 by Jose Pino