본문 바로가기

INTERTLUDE Project _ Bluetooth

Kali Linux 시스템에서 Blueborne 공격을 이용한 Bluetooth 해킹 실습 과정

먼저 Blueborne 공격을 이용하여 Bluetooth 해킹을 하기 위해서는,

(BlueBorne) 이 무엇이고 어떻게 작동하는지 알아야 합니다. 

 

 

Q. 블루본(BlueBorne) 이란?

 

블루본이란, 블루투스 프로토콜을 통해 공격자가 기기에 악의적인 코드를 삽입하거나 제어할 있는 취약점의 집합입니다. 보안 기업 ‘Armis’에서는 블루투스 보안의 취약점 8개를 발견하고, 8개를 묶어서 블루본(BlueBorne)이라고 이름을 붙였습니다.

 

덧붙여 설명하자면, 블루본은  Bluetooth(블루투스) 공중을 의미하는 Airborne 합성어로,

블루투스의 무선 통신을 이용해서 해킹하는 공격 의미합니다.

 

한국인터넷 진흥원에서는, 블루본을공격자가 블루투스가 활성화되어 있는 장치에 페어링 하지 않아도 장치를 제어할 있는 공격 벡터 정의하고 있습니다.

 

블루본의 가장 위험은 블루투스 활성화를 제외한 다른 조건이나 구성이 필요 없으며,공격자가 취약점을 이용하여 원격으로 기기에 액세스 있다는 것입니다. 이로 인해 공격자는 기기의 데이터를 탈취하거나 변경할 있으며, 악성 코드를 설치하여 사용자의 개인 정보를 훔치거나 기기를 제어할 수 있습니다. 

 

블루본의 취약점은 안드로이드, iOS, 윈도,리눅스 운영체제의 모바일, 데스크톱, IoT 기기에서 발견되었습니다.

 

다음은 블루투스 취약점 8개 각각에 대한 설명에 해당합니다.

CVE-2017-0781: 안드로이드 BNEP(Bluetooth Network Encapsulation Protocol, 테더링)에서

발생하는 원격코드 실행 취약점
CVE-2017-0782: 안드로이드 BNEP PAN(Personal Area Networking, IP 기반 장치 간 네트워크 연결)

프로필에서 발생하는 원격코드 실행 취약점
CVE-2017-0783: 안드로이드 블루투스 PAN 프로필에서 발생하는 중간자(Man-in-the-Middle) 공격 취약점
CVE-2017-0785: 안드로이드 SDP(Service Discovery Protocol, 주변 장치 식별)에서 발생하는 정보노출 취약점
CVE-2017-8628: 윈도 블루투스 드라이버에서 발생하는 스푸핑 취약점
CVE-2017-1000250: 리눅스 블루투스 스택(BlueZ)에서 발생하는 정보노출 취약점
CVE-2017-1000251: 리눅스 커널 원격코드 실행 취약점
CVE-2017-14315: 애플 Low Energy 오디오 프로토콜에서 발생하는 원격코드 실행 취약점

 

블루본의 공격 원리, 다음과 같습니다.

 

블루투스가 활성화되면, 이후에 MAC 주소 일부가 공중에 전송되는 것입니다. 근처의 공격자는 블루투스 기기 통신을스니핑 하고,하나의 패킷에서 MAC 주소의 80%까지 확보할 있습니다. 나머지 20% 무차별 대입 공격으로 파악하며, 물리적으로 근방에 있어야 한다는 조건을 제외하면 블루투스를 통한 패킷 탈취는 순전히 공격자의 의지에 달린 일이라고 파악할  있습니다.

 

위에서 언급한 것처럼, 블루본 공격의 특징 사용자의 동작이 필요 없고 모든 소프트웨어 버전과 호환이 된다는 것입니다. 블루투스가 활성화되어 있어야 한다는 점을 제외하면, 어떠한 사전 조건이나 구성도 필요 없습니다.

 

블루본은 공격 시에, 블루투스를 지원하는 기기가 연결 가능한 다른 기기의 신호를 항상 수신 대기 한다는 점을 이용합니다. 무선 연결을 위해서는, 일반적으로 수동 페어링이 필요하지만 일단 페어링이 되면 이후에는 해당 기기들은 서로 거리가 근접해지면서 자동으로 재연결이 되는 것입니다.

 

블루본은 취약점을 이용하여, 페어링 프로세스를 거치지 않고 근처의 기기와 블루투스 연결을 설정한 이후에 일부로 블루투스 기기 목록을 확인하지 않는 , 블루본을 사용한 연결이 발각될 가능성은 거의 없게 됩니다. 블루본은 존재하지 않는 프로토콜의 약점 또는 취약한 PIN 코드와 관련된 인증 기반 문제를 이용했던 과거의 블루투스 기반 악용과는 다르게 작동합니다. 왜냐하면 사용자가 무언가를해야 한다는 조건이 없이, 블루본 공격이 가능하기 때문입니다.

 

블루투스를 해킹하는 블루본(BlueBorne) 공격을 직접 실습해 보고,

해당 코드에서는 어떤 취약점을 이용하였는지 함께 살펴보도록 하겠습니다

 

실습을 하기 위해서는, 1. 패치가 적용되지 않은 장치와 2. 블루투스 어댑터가 필요하며

다음으로는 3. kali 시스템에 종속성을 설치하는 과정이 필요합니다. 

 

1.     Kali 시스템에 apt-get bluetooth libbluetooth-dev 명령어를 입력하여서

Kali Linux 시스템에서 패키지 관리자를 사용하여 Bluetooth 관련 라이브러리 개발 도구를 설치합니다.

2.    다음으로는, pip install pybluex 명령어를 입력하여서 파이썬 패키지 관리자(pip)를 사용하여 "pybluex"라는 이름의 파이썬 라이브러리를 설치합니다.

3.    pip install pwntools 명령어를 입력하여서 파이썬 패키지 관리자(pip)를 사용하여 "pwntools"라는 이름의 파이썬 라이브러리를 설치합니다.

 

다음 단계로는 Python 스크립트를 설치합니다.

 

Armis에서는 이러한 익스플로잇을 개발하였지만, 대중들에게 공개하지는 않았습니다.

그러나 보안 연구원이 Armis 연구를 기반으로 Python 스크립트를 개발한 것을 깃허브 링크를 통해 찾을 수 있기에,

실습에는 해당 스크립트를 복제하여 이용하도록 하겠습니다.

 

1.    Git clone https://github.com/ojasookert/CVE-2017-0785 명령어를 입력하여,

Git 버전 관리 시스템을 사용하여 GitHub 저장소에서 특정 프로젝트를 복제(clone) 합니다.

2.    복제한 후에는 ls -l 명령어를 입력하여 CVE-2017-0785라는 새로운 디렉터리가 생성된 것을 확인할 수 있습니다.

3.    생성된 것을 확인하면, 해당 디렉터리로 이동하는 cd 명령어를 거친 후에,  

 chmod 명령어를 통해 파이썬 스크립트에 대한 실행 권한을 스스로 부여하도록 하였습니다.

 

+ 블루본 공격 실습에서 이용하는, 파이썬 스크립트 코드 파일에 대해 살펴보도록 하겠습니다.

 

해당 CVE-2017-0785.py 파일은, 우리가 위에서 살펴보았던 블루본 취약점인 CVE-2017-0785을 이용한 공격을 실습해 보기 위한  코드입니다. 이 코드는 블루투스L2 CAP(Low Complexity Communication Protocol)을 통해 블루투스 스택에 특정 패킷을 보내고 응답을 분석하여 공격을 수행합니다.

CVE-2017-0785: 안드로이드 SDP(Service Discovery Protocol, 주변 장치 식별)에서 발생하는 정보노출 취약점

 

코드에 대해 더 자세히 살펴보자면,

1.  from pwn import * 명령어는, pwn 모듈을 import 하여 해당 모듈의 기능을 사용하는 명령어입니다.

pwn 모듈은 보안 관련 작업을 지원하는 파이썬 라이브러리로, 취약점 분석 공격 시나리오를 구현하는 사용됩니다.

2.  import Bluetooth 명령어는, 블루투스 관련 작업을 지원하는 파이썬 라이브러리를 import 합니다.

3.  if not 'TARGET' in args:: 명령어는, 스크립트가 실행될 목표 타겟 주소를 인자로 전달받지 않았을 경우,

사용 방법을 출력하고 스크립트를 종료하게 되는 명령어 입니다.

4. target = args ['TARGET']명령어는, 목표 타겟 주소를 가져오는 명령어입니다.

5. def packet(service, continuation_state) 명령어는,

패킷을 생성하는 함수를 정의합니다. 이 함수는 공격에 사용되는 패킷을 생성합니다.

6. sock = bluetooth.BluetoothSocket(bluetooth.L2 CAP) 코드는 L2CAP 소켓을 생성하여 블루투스 기기와 연결하는 것을 의미하는 명령어 입니다.

7. sock.connect((target, 1)) 명령어는, 목표 타겟과 연결하는 명령어입니다.

패킷을 생성하여 목표 타겟에 전송하고 응답을 받고,

이후에는 응답 패킷을 분석하여 공격에 필요한 정보를 추출하는 것입니다. 

 

해당 파이썬 스크립트 파일은 블루투스 L2CAP 스택에 존재하는 취약점을 이용하여 공격을 수행합니다.

취약점은 블루본 취약점 하나인 CVE-2017-0785:를 타깃으로 합니다. 해당 취약점은 블루투스 스택에서 메모리를  비정상적으로 읽어오는 버그를 이용하여 원격으로의 코드 실행을 허용합니다.

이러한 취약점을 이용하면 공격자가 블루투스를 통해 원격 기기에 악성 코드를 전송하고 실행할 수 있게 되는 것입니다.

 

다음 단계로는 대상의 MAC 주소를 가져옵니다.

 

위의 단계들을 통해 종속성을 충족하고, Python 스크립트를 설치했으므로,

Blueborne 공격에 성공하기 위해서는 대상 시스템의 MAC 주소를 얻는 과정만 남았기 때문입니다.

 

1. Kali 시스템에서 hcitool scan 명령어를 통하여, 범위 내에서 사용 가능한 블루투스 장치를 검색합니다.

범위 내에서 사용 가능한 블루투스 장치를 검색하고 찾았다면, 그 다음 단계로는 블루투스 익스플로잇을 실행하게 됩니다.

 

익스플로잇을 실행하기 위해서는,

Python, 스크립트 이름 및 TARGET= <대상 시스템의 MAC 주소>주소>를 포함하여 명령어를 입력하면 됩니다.

 

위의 명령어를 입력하면, 파이썬 스크립트가 대상을 악용하여 메모리에서 byte 들을 제거하고 있다는 사실을 알 수 있습니다. 이를해당 스크립트를 편집하여 더 많거나 적은 양의 메모리도 추출할 수 있다는 것을 파악할 수 있습니다. 

 

 

 위의 과정들을 거쳐 CVE-2017-0785.py 파이썬 스크립트 파일을 통한 CVE-2017-0785 취약점 공격이 성공하게 되면,

 공격자가 블루투스를 통해 원격 기기에 악성 코드를 전송하고 실행할 수 있게 된다는 사실을 확인할 수 있습니다. 

 

이러한 취약점 공격에 대응하기 위한 방안으로는, 

 

1. 시스템 업데이트 및 패치 적용

: 제조업체 및 소프트웨어 개발자들은 CVE-2017-0785 취약점에 대한 보안 패치를 배포하여 사용자들에게 제공하였기에,  따라서 시스템 및 소프트웨어를 최신 상태로 업데이트하고 취약점에 대응하는 것이 중요합니다.

2. 블루투스 비활성화: 필요하지 않은 경우에는 기기의 블루투스 기능을 비활성화하여 공격 가능성을 줄일 수 있습니다.   블루투스를 사용할 때에는 신뢰할 수 있는 기기와만 페어링 하고, 공용 블루투스 네트워크에 연결하지 않는 것이 좋습니다.

3. 네트워크 방화벽 설정: 외부에서 블루투스 기기로의 접근을 제한하기 위해 네트워크 방화벽 설정을 조정할 수 있습니다. 블루투스 서비스에 대한 외부 접근을 차단하거나 제한함으로써 공격 가능성을 줄일 수 있습니다.

4. 보안 소프트웨어 사용: 안티바이러스 및 방화벽과 같은 보안 소프트웨어를 사용하여 악성 코드나 공격 시도를 탐지하고 차단할 수 있습니다. 시스템에 보안 소프트웨어를 설치하고 정기적으로 업데이트하는 것이 중요합니다.

5. 사용자 교육: 사용자들에게 블루투스 보안에 대한 교육을 제공하여 알려진 취약점에 대해 경각심을 가지고 신중하게 행동하도록 유도하는 것이 중요합니다. 사용자들이 악의적인 블루투스 장치와의 상호작용을 피하도록 안내하는 것이 필요합니다.

이러한 대응책들을 종합적으로 적용함으로써 Android 운영 체제의 블루투스 스택에서 발생하는 취약점으로, 공격자가 악의적인 코드를 실행하게 해주는  CVE-2017-0785 취약점 공격에 대응하여 시스템 및 기기를 안전하게 유지할 수 있습니다.

 

 

추후에 수정 사항들이 생긴다면 반영하여서 다시 업로드하도록 하겠습니다. 

감사합니다 :)