ETC
보안괴담?, BadBIOS ②
2017 11 03
  • Facebook
  • Twitter
  • Copy URL

Dragos Ruiu가 말한 BadBIOS는 여러모로 논란이 많다. BadBIOS가 사실인지, 아닌지를 두고 보안업계에서는 여러 말이 오갔는데, 오늘은 그에 대해 얘기를 해볼까 한다. BadBIOS는 사이버 무기인 Stuxnet보다 한 단계 더 발전한 형태의 악성코드로, 어떻게 감염되었고 동작하는지, 무슨 목적으로 배포되었는지 알 길이 없는 악성코드다. Dragos Ruiu는 BadBIOS를 처음 발견하여 발표한 인물로, 그가 얘기하는 악성코드의 특징들이 놀라울 정도다. 악성코드는 설치된 운영 체제를 변경하기 위해 데이터 파일 및 설정을 변경하고 삭제하기도 한다. 또한, 무선 네트워크 및 블루투스 카드를 물리적으로 제거한 상태에서도 어떠한 방식인지 모를 방법으로 데이터를 외부로 유출한다.

이미지를 불러오는데 실패했습니다.

이러한 악성코드의 특징은 많은 이를 논란의 중심으로 이끌었다. 이는 Dragos Ruiu가 말하는 특징들이 당시 어떠한 방법으로 그렇게 할 수 있었는지 설명할 길이 없었기 때문이다. 이 때문에 처음에는 그의 말에 놀라워하고 호응이 오갔지만, 시간이 흐를수록 그의 의견에 반박하는 글들이 나오며 그를 트롤러, 편집증 환자 취급을 하기도 했다. 그렇다면 Dragos Ruiu는 어떤 근거로 자신의 얘기가 사실이라는 것을 얘기하고, 반대로 어째서 그의 BadBIOS가 다른 사람들의 비판을 받는 것인지 하나씩 살펴보도록 하자.

“BadBIOS는 NSA의 해킹 도구와 같은 펌웨어로, 플래시 컨트롤을 재프로그래밍할 수 있으며, OS X, Windows, BSD 등 여러 플랫폼에서 작동한다. 또한, 아무도 BadBIOS를 분석할 수 없도록 숨겨져 있고, 초고속 스피커 주파수를 사용하여 데이터를 다른 감염된 컴퓨터로 보낸다. “

위의 말은 Dragos Ruiu가 BadBIOS를 정의한 것이다. 차근차근 하나씩 자세히 살펴보며 그의 주장과 추측하는 기술에 관해 이야기해보자. 먼저, 컴퓨터를 실행하면 플래시 메모리에 있는 코드가 실행되기 시작한다. 이 시작 코드는 시스템을 테스트하고 하드웨어를 초기화한 다음, 운영 체제를 로드한다. 이를 BIOS ROM이라고 부르는데, BIOS는 운영체제와 하드웨어의 상호작용을 할 수 있는 드라이버를 포함하고 있다. 하지만 오늘날에는 BIOS 드라이버 대신에 자체 드라이버를 포함하고 있으며, 쓰기가 가능한 플래시 메모리를 사용하고 있다. 따라서 BIOS ROM은 더 이상 BIOS ROM의 의미는 아니지만, 여전히 우리는 이를 호출하여 사용한다.

따라서 이 점을 이용해 해커는 BIOS 플래시 메모리를 덮어쓰고, 시작할 때 실행되는 자체 코드를 추가하여 원하는 작업을 할 수도 있다. 하지만 결국 BIOS는 운영 체제로 제어권을 넘기고 실행을 중단하기 때문에 해커처럼 공격하기란 쉬운 일은 아니다. 그래서 이를 제어하기 위해 부팅 초기에 BIOS 드라이버를 사용하여 하드 드라이브를 읽고, BIOS가 어떤 파일을 로드하는지 확인한 다음 일부 파일을 악의적인 파일로 로드하는 공격을 하기도 한다. 단지 쉬운 일이 아닐 뿐이지, 할 수 없다는 것은 아니다. 아무튼, BIOS의 제어권을 유지하기 위해 Ruiu는 플래시 메모리에만 집중했지만 사실 한 군데가 더 있다. 컴퓨터의 각 장치에는 ‘마이크로 컨트롤러’라고 하는 자체 마이크로프로세서가 있다. 각 마이크로 컨트롤러에는 자체 플래시 메모리와 펌웨어가 있는데, 대부분은 자체적으로 업데이트할 수 있게 되어 있다. 여기에서 Intel x86 CPU에는 전원을 절약하기 위해 주파수와 같은 것을 제어하는 내장형 마이크로 컨트롤러가 있는데, Ruiu는 이를 이용하여 주파수를 BIOS ROM을 감염시키고 주파수를 만들어내는 것으로 추측했다.

그가 사용한 에어 맥북의 매킨토시에는 Bluetooth 어댑터가 내장되어 있다. 이는 Broadcom BCM20702 칩을 사용하는데, 이 칩에는 약 70MHz의 ARM7-TDMI 프로세서가 들어 있다. 그가 의심하고 있는 것은 이 부분이었다. 예를 들어, 만약 악성코드가 침입한다면 기본 BIOS를 감염시키고 시스템에 상주할 것이다. 그리고 컴퓨터 전원이 꺼진 상태에서도 전원을 켤 수 있는 ‘시스템 에이전트’를 이용할 수도 있다. 이 시스템 에이전트는 키보드의 키를 누르면 네트워크에서 특수한 패킷을 수신할 때나 특정 시간에 컴퓨터의 전원을 켤 수 있도록 설계된 것으로 이를 이용해 악의적인 코드를 넣어 BIOS를 감염시킬 수 있지 않을까 생각한 것이다. 더욱이 이러한 장치가 다양해 보이지만 사실은 마이크로 컨트롤러와 플래시 메모리 제조업체는 극소수에 불과하므로 해커가 바이러스 코드를 작성한 후에는 배터리 컨트롤러를 감염시키기 위해 코드를 확장하는 것은 어렵지 않은 일이다.

결론은 시스템이 악성코드에 감염되면 영구적으로 감염되어 시스템에서 완전히 제거할 수 없으며, 앞서 얘기한 예시처럼 코드를 숨길 수 있는 곳이 많고, 설령 시스템을 감염시키기 위해 방해가 되는 구성 요소가 많더라도 앞서 발견한 증상처럼 악성코드가 이를 지워버리면 될 일이라 보고 있다. 더욱이, 백신도 이를 탐지하거나 보호할 방법이 없으며 이에 관한 기술은 이미 5년 전부터 언급되었으므로 여기에 적용되더라도 전혀 이상할 것이 없다는 점이다.

두 번째로, Ruiu는 BadBIOS에 감염된 두 대의 컴퓨터는 사람의 청력보다 더 높은 주파수의 오디오 포트를 통해 서로 통신할 수 있기 때문에 네트워크가 연결되어 있지 않은 컴퓨터도 통신할 수 있다고 믿었다. 오늘 날 사운드 카드와 같은 오디오 신호를 컴퓨터에서 실행되는 소프트웨어를 사용하여 변환하거나 수정할 수 있다고 한다. 더군다나 현대의 컴퓨터는 이러한 작업을 하는 데 매우 빠르게 만들어낼 수 있다. 그리고 이제는 USB 포트에 동글이 구성된 ‘소프트웨어 정의 라디오’가 사용되었을 것으로 보고 있다. 이 동글은 고주파에서 전파를 샘플링 한 다음, 컴퓨터에서 샘플을 처리하는 것으로, 10달러짜리 동글을 사용하면 컴퓨터에서 TV, 라디오 방송과 같은 전파를 들을 수 있다. 전파를 전송할 수 있고, 수신할 수 있는 살짝 더 비싼 동글을 사용하면 컴퓨터를 Wi-Fi 액세스 포인트 또는 전화국으로 위장할 수도 있으며, 여기서 받는 모든 신호 처리는 소프트웨어의 메인 CPU에서 수행하다.

오늘날의 컴퓨터는 96KHz 샘플링 속도에 24비트 샘플로 ‘고화질’ 오디오를 지원한다. 그리고 이 기능은 컴퓨터에 있는 오래된 RealTek 오디오 칩으로 가능하다고 본다. 해커들은 통신용으로 동일한 소프트 모뎀 또는 소프트 라디오 개념을 적용할 수 있다. 사람의 청력 범위에 속하는 낮은 20KHz에 대역 통과 필터를 적용하고 나머지를 초음파 주파수에 해당하는 대역폭을 사용하여 통신하는 것이다. 해커가 만약 이러한 신호 처리에 익숙하지 않더라도, 오픈 소스 코드를 통해 쉽게 처리 할 수 있다. 문제는 스피커가 소리를 왜곡하기 때문에 조금 통신을 받는데 조금 까다롭다는 것이다. 보통은 이를 소리가 벽을 반사하여 방안의 반향을 처리해야 하지만, Ruiu는 이를 전송 속도를 줄이거나 고급 신호 처리를 통해 해결할 수 있다고 보고 있다. 즉, 음파, 소리를 이용한 "air gapped communication"를 데이터 통신의 방법으로 추측하는 것이다. 이는 쉽지 않은 일이지만 최근 들어서도 계속 얘기가 나오는 주제이기도 하다. Ruiu가 가지고 있는 에어 맥북은 음악이 백그라운드에서 재생되는 동안 20KHz 톤을 만들어 낼 수 있다. 이는 저속 통신이라고 해도 실용적인 기술이라는 명확한 시사점을 가지고 있다.

세 번째로, Ruiu는 감염된 컴퓨터에서 USB를 연결했다가 뽑은 다음, 감염되지 않은 시스템에 USB를 연결하면 악성코드가 감염될 것으로 예상하고 있다. 이는 USB의 두 가지 중요한 기능에 의존한다. 먼저, USB 장치에 자체 마이크로 프로세서, 펌웨어가 포함되어 있고, 드라이버 자체가 버그라는 점이다. 이를 위해서 플래시 드라이브용 소프트웨어를 다운로드한다. 이 소프트웨어를 사용하면 CD-ROM 드라이브를 에뮬레이트하여 ROM을 다시 프로그래밍 할 수 있지만, 새 펌웨어를 플래시 드라이브에 다운로드할 수도 있다. 따라서 악성 코드가 삽입된 USB 드라이브의 데이터를 덮어 쓰지 않고, 펌웨어를 덮어 쓰는 것은 생각보다 간단하다는 것이다. USB 드라이브에 악의적인 펌웨어가 있으면 이 USB가 연결하면 연결된 새로운 컴퓨터를 공격할 수 있다. 이는 USB 장치와 통신하는 Windows나 Linux, Mac의 소프트웨어가 본질에서 안전하지 않기 때문이다. 즉, 컴퓨터는 연결되는 모든 USB 장치에 보통은 신뢰성을 가지고 있다. 이를 통해 장치가 드라이버 코드의 취약점을 악용할 수 있다. 예를 들어, USB 드라이버는 ‘버퍼 오버 플로우’버그로 가득 차 있을 때, 사양에 따라 16바이트 미만의 버퍼가 있다고 가정해 보자. 손상된 USB 장치는 대신 100바이트를 제공한다. 드라이버는 이러한 종류의 것을 검사하지 않기 때문에 손상된 USB 장치가 호스트 시스템을 제어할 수 있다. 하지만 이러한 바이러스로 잘 만드는 것은 까다로운 일이다. 이 코드는 부팅 프로세스 중에 감염될 때 BIOS 공급 업체와 같은 시스템에 시그니처를 저장하거나 나중에 USB 드라이브를 연결할 때 운영 체제를 시그니처를 확보하는 것도 방법이다. 그러나 동시에 새로운 USB 컨트롤러를 악성 코드에 추가하거나 새로운 운영 체제 대상을 추가하는 것만으로도 충분할 것이다.

마지막으로 Ruiu는 시스템이 IPv6을 지원하지 않으면 IPV6 패킷을 전송하는 것을 확인했다. 사실, 컴퓨터가 네트워크를 통해 은밀하게 통신 할 방법은 많다. 악성 코드가 연결할 수 있는 많은 고급 구성 요소가 있으므로, 네트워크를 보고 통신을 할 수 없다. 예를 들어 보자. Chrome 브라우저에서 Gmail을 통해 이메일을 보낼 때마다 악성 코드의 추가 메시지를 보낸 다음, 보낸 폴더에서 메시지를 지울 수 있다. 유선에서 볼 수 있는 것은 SSL 패킷 중 일부가 예상보다 약간 크다는 것이다. 하지만 컴퓨터가 Gmail에 연결되어 있지 않으면 네트워크 통신이 발생하지 않는다. 또 다른 예로 DCOM 디버깅 기능이다. DCOM은 컴퓨터를 통해 배포하는 기업용 앱을 만드는 Microsoft의 방법으로 모든 DCOM 패킷과 함께 프로그램에 DLL을 추가 할 수 있다. 따라서 네트워크를 스니핑하는 동안 암호화되지 않은 패킷도 명확하게 표시되므로 각 패킷에서 이 추가 정보가 빠질 가능성이 크다. 아니면 오랜 통신을 위한 방법으로 DNS를 사용하는 방법도 있다. DNS 패킷을 10 초 동안 10개의 DNS를 기다렸다가 자신의 DNS 패킷을 추가한다. 여기서 해커는 패킷 내에서 숨겨진 통신을 쉽게 숨길 수 있으며, 이는 네트워크를 가로지르는 모든 패킷을 감지하기가 어렵다는 것을 의미한다.

이처럼, Dragos Ruiu는 자신이 발견한 BadBIOS에 대해 기능을 새로운 기술로, 가능성에 대해 설명했다. 당시 2013년인 것을 생각한다면 어떻게 보면 사람들이 안 믿어질 수도 있지 않을까 생각한다. 그렇다면 Dragos Ruiu에 말이 거짓말이라고 말하는 사람들은 어떤 말로 아니라고 하는 것일까. 이에 대해서는 3부에서 이야기해보자.

유성경 yuopboy@grayhash.com