2021.06.22

‘20세기부터 있었더라’ 오래된 SW 버그 10선

Josh Fruhlinger | CSO
2021년, 현대 컴퓨팅의 근간에 해당하는 한 시스템에서 취약성이 발견됐다. 공격자가 시스템으로 하여금 임의의 코드를 강제로 실행하게 할 수 있는 취약점이었다. 충격적이게도 이 취약한 코드는 약 54년 전에 작성된 것이었다. 그런데 아직도 이 취약성에 대한 패치가 존재하지 않으며 앞으로도 제공되지 않을 것 같다.

그 이유는 문제의 이 시스템이 컴퓨터 공학 분야에서 이론적으로 매우 중요하지만 실제 컴퓨터로 개발된 적은 없었던 마빈 민스키(Marvin Minsky)의 1967년 범용 튜링 머신(Universal Turing Machine)이었기 때문이다. 민스키가 설계한 후 약 10년이 지난 후 초기 버전의 유닉스(Unix)와 DOS가 등장했고 그 후속작들이 지금껏 사용되고 있다. 최근 발견된, 역사가 오래 된 버그에 대해 알아본다.
 
Image Credit : Getty Images Bank

닛산(Nissan) 텔레매틱스 컨트롤 모듈 베이스밴드 취약성
 
  • 나이: 7년
  • 도입 날짜: 2010년
  • 수정 날짜: 2017년

2011년, 보안 연구원 랄프 필립 웨이만은 스마트폰에서 사용되는 베이스밴드 프로세서에 최근 유입된 결함을 발견했다. 이를 악용하면 해커가 가짜 기지국을 만들어 스마트폰이 여기에 연결하도록 속인 후 네트워크 연결을 가로챌 수 있었다. 스마트폰 제조사들은 이 결함을 상대적으로 신속하게 해결했으며 이내 잊어버렸다.

그러나 한 가지 문제가 있었다. 스마트폰만 이 칩을 사용한 것이 아니었다. “기본적으로 동일한 셀룰러 베이스밴드 칩셋이 닛산 리프(Leaf)와 다른 여러 차량의 텔레매틱스 유닛에 사용되었다”라고 보안 기업 에클립시움(Eclypsium)의 수석 사이버 보안 연구원 제시 마이클이 말했다. (에클립시움과 의견을 같이 하는) 많은 연구원들이 폐차장에서 구한 자동차로 실험하여 해당 취약성을 발견했다.

마이클은 “약 7년 전에 다른 시장에서 공개된 이 취약성이 자동차 분야에서도 발견됐다. 자체적으로 복잡한 공급망을 가진 굉장히 다른 시장 부문이었기 때문에 자동차가 익스플로잇 공격에 취약하다는 사실이 간과됐다”라고 말했다. 이것은 산업 고립화로 인한 현실적인 위험을 보여주는 사례다.

sudo의 바론 사메딧(Baron Samedit)
 
  • 나이: 9년 6개월
  • 도입 날짜: 2011년 7월
  • 수정 날짜: 2021년 1월

유닉스 관리자의 툴킷 중 중요한 도인 sudo 명령은 올바른 호출 권한을 가진 사람에게 강력한 권한을 제공한다. 셸(Shell) 모드에서 sudo를 <code>-c</code> 플래그로 호출한 후 슈퍼유저(Superuser) 권한으로 실행될 일련의 쉘 명령을 입력할 수 있다. 이 모드는 이런 명령에 삽입된 특수 문자가 시스템을 속여 할당된 메모리 버퍼 밖에 코드를 작성하도록 할 수 있다. 결과적으로 루트 권한에 대한 액세스를 제공할 수 있는 버퍼 오버플로 공격에 취약하다.

권한을 가진 이가 시스템을 헤집고 다니지 않도록 이 명령에 대한 헤지도 있기는 했다. 일반적으로 sudo는 이런 특수 문자가 처리되기 전에 인식하여 이런 공격을 방지한다. 하지만, 2011년, sudo에 한 취약성이 실수로 삽입되어 버퍼 오버플로 공격이 가능해졌으며 약 10년 동안 숨어 있었다. 이 결함은 sudo 명령에 있는 것이 아니라 보조 sudoedit 명령에 있었다. 이를 악용하면 사용자가 슈퍼유저 권한을 사용하여 편집 프로그램 자체에 완전한 슈퍼유저 권한을 제공하지 않고도 파일에 액세스하여 편집할 수 있다. 

2021년 1월 퀄리스(Qualys) 블로그에 따르면 이 취약성으로 심각한 권한 상승이 가능하며 패치가 필수적이다. 영향을 받는 시스템으로는 리눅스, 솔라리스, 맥OS 등 거의 모든 유닉스 변종이다.

리눅스 GRUB2 시큐어 부트(Secure Boot) 구멍
 
  • 나이: 10년
  • 도입 날짜: 2010년
  • 수정 날짜: 2020년 7월

BIOS를 대체하기 위해 UEFI가 도입되었을 때, UEFI는 운영체제를 시작하는 부트로딩(Bootloading) 소프트웨어 수준에서 작동하는 공격에 대응하는 기능을 갖춘 보안의 첨단으로 여겨졌다. 그 핵심은 각 부트로더(Bootloader) 프로그램이 정당한지 검증하는 서명된 암호 기법 인증서 인터로크 체인인 시큐어 부트라는 메커니즘이다. UEFI의 루트 인증서는 마이크로소프트가 서명하고 리눅스 배포판은 자체적인 부트로더를 넣으며, 각각은 자체적으로 검증된 인증서가 있다.

하지만 <CSO>의 루시안 콘스탄틴이 설명했듯이 UEFI 지원 인증서를 갖춘 인기 있는 리눅스 부트로더인 GRUB2에는 구성 파일에 삽입된 악성 코드가 악용할 수 있는 버퍼 오버플로 취약성이 포함되어 있다(GRUB2 자체는 서명되어 있지만 로컬 관리자가 편집할 수 있는 구성 파일은 그렇지 않다). 

에클립시움이 발견한 이 보안 구멍을 악용하려면 공격자는 해 대상 기기에 대한 일정 수준의 로컬 제어가 필요하다. 그러나 성공할 경우 해당 컴퓨터가 부팅할 때마다 통제력을 유지할 수 있기 때문에 시스템에서 쫓아내기가 어렵다.

라이언위키(LionWiki) LFI(Local File Inclusion)
 
  • 나이: 11년 11개월
  • 도입 날짜: 2008년 11월
  • 수정 날짜: 2020년 10월

라이언위키는 PHP로 프로그래밍 된 미니멀리즘 위키 엔진이다. 위키피디아(Wikipedia) 등에 사용되는 다른 인기 위키 엔진과는 달리 라이언위키는 데이터베이스를 사용하지 않으며 완전한 파일 기반이다. 간결성이라는 목적에서 볼 때 이는 하나의 강점이지만 상당한 취약성도 발생할 수 있다.

기본적으로 이 엔진에서는 특정 라이언위키 인스턴스를 구성하는 다양한 파일에 파일과 해당 페이지의 URL에 포함된 경로 이름으로 액세스하게 된다. 즉, 올바르게 생성된 URL이 있다면 라이언위키 인스턴스를 관리하는 서버의 파일 시스템 안에서 이동할 수 있다. 이런 시도를 차단하기 위해 URL 필터링 프로비전(Provision)이 마련되어 있지만 IICR(Infosec Institute Cyber Range)의 엔지니어 준 워너는 이것들을 꽤 쉽게 무너질 있다는 사실을 발견했다.

워너는 이 취약성이 일부 교정 노력에도 불구하고 사라지지 않았다고 지적했다. 그녀는 “2009년 7월에 일부 완화책을 시도됐으며, 이후 2012년 1월에 더욱 광범위한 완화책이 적용됐다. 이런 완화책에도 불구하고 코드는 여전히 같은 유형의 공격에 취약했다. 이 취약성은 해당 코드 안에 머무르다가 8년이 지난 후 2020년 10월 완화책을 우회하는 방법과 함께 다시 발견되었다”라고 말했다. 개발 측은 이 버그가 공식적으로 보고된 후 패치했다.

도메인 타임 2(Domain Time II) 측면자 공격
 
  • 나이: 14년
  • 도입 날짜: 2007년
  • 수정 날짜: 2021년 4월

같은 네트워크에 있는 2대의 컴퓨터가 현재 시간에 대해 합의할 수 없다면 여러 골치 아픈 결과가 발생할 수 있다. 컴퓨팅 분야에서 오랫동안 지속된 이 문제를 해결하는 성숙하면서도 널리 보급된 기업용 솔루션이 윈도우, 리눅스, 솔라리스에서 사용하는 클로즈드 소스(Closed Source) 애플리케이션인 도메인 타임 2이다.

도메인 타임 2는 그 존재 기간 동안 매우 심각한 취약성을 내포하고 있었다. 사용자가 설정한 간격 또는 조건에 따라 프로그램이 UDP 쿼리를 해당 소프트웨어 제공사인 GAP(Greyware Automation Products)가 운용하는 업데이트 서버로 전송한다. 서버가 URL로 응답하면 도메인 타임 2가 관리자 권한으로 프로그램을 실행하여 해당 URL에서 업데이트를 다운로드한 후 설치한다.

그러나 악당이 그레이웨어의 업데이트 서버보다 먼저 해당 쿼리에 응답할 수 있게 되면 해당 공격자가 자신의 응답을 전송함으로써 도메인 타임 2로 하여금 자신이 설치하고자 하는 맬웨어를 다운로드하도록 할 수 있었다. 

중간자 공격에서는 공격자가 양방향 통신을 가로챈다. 반면 이 측면자(man-on-the-side) 공격에서는 공격자가 대상 기기로 응답이 침투하는 것을 막을 수 없기 때문에 자신의 응답을 더 빨리 전송해야 한다. 즉, 공격자가 이미 대상 로컬 네트워크에 있는 컴퓨터를 통제하고 있어야 공격이 가능하다. 

단 이 공격을 통해 공격자는 로컬 네트워크 안에서 더욱 중요하고 안전한 기기로 침입할 수 있다. 이 취약성은 보안 기업 그림(Grimm)이 발견했으며, 이 결함이 최소한 2007년까지 거슬러 올라가는 소프트웨어 버전에서부터 존재했다고 지적했다.

리눅스 SCSI 하위 시스템 버그
 
  • 나이: 15년
  • 도입 날짜: 2006년
  • 수정 날짜: 2021년 3월

옛날 사람이라면 IBM PC나 클래식 맥에 하드 드라이브가 연결되어 있던 방식일 수 있는 1980년대의 데이터 전송 표준인 SCSI를 기억할 것이다. 지금도 일부 환경에서는 사용되고 있는 규격이다. 특히 리눅스는 가능한 유연하고 범용적이어야 하기 때문에 이를 필요로 하는 시스템을 위한 광범위한 SCSI 하위 시스템을 보유하고 있다. 

이 모듈은 ‘자동 모듈 로딩’이라는 것을 통해 제공되며, 여기에서 OS가 필요 시 필요한 시스템 코드를 찾아 설치한다. SCSI 드라이브를 리눅스 기기에 연결할 때 필요한 지원 코드를 찾을 필요가 없다는 점에서는 유용하지만 이 코드의 오류를 악용하려는 공격자에게도 유용하다.

사이버 보안 컨설팅 기업 그림은 이 리눅스 SCSI 코드의 버그 여러 개를 2021년 3월에 발견해 공개했다. 하나는 일반 사용자가 루트 권한을 얻을 수 있는 오버플로 취약성이며, 커널(Kernel)의 정보가 사용자 공간으로 유출될 수 있는 오류도 있었다. 이 모든 것들을 이용하여 권한이 필요한 정보를 얻거나 영향을 받는 기기에 DoS 공격을 수행할 수 있었다. 그림은 이 버그가 2006년에 생겨났다고 밝혔으며 “이 모드가 개발될 당시에 만연했던 보안 프로그래밍 활동의 부재를 나타낸다”라고 밝혔다.

SIGRed
 
  • 나이: 17년
  • 도입 날짜: 2003년
  • 수정 날짜: 2020년

DNS는 주요 인터넷 백본 중 하나다. 이 시스템을 통해 컴퓨터는 어떤 IP 주소가 URL과 연결되어 있는지 파악한다. 이 시스템은 계층적이며, 피라미드 형태로 요청이 오르내리면서 “이 컴퓨터의 위치는 어디인가?”라는 질문에 대한 답을 아는 DNS 서버를 찾는다. 그 결과, DNS가 모든 주요 운영체제에 내장됐다.

2020년, 마이크로소프트는 자체 버전의 DNS에 있는 치명적인 취약성을 공개했다. 이 취약성은 코드 속에 17년 동안이나 숨어 있었다. 단 실제로 악용된 증거는 없다. 체크 포인트(Check Point) 연구진이 SIGRed라고 명명한 이 취약성은 윈도우 DNS 서버에 있는 버퍼 오버플로 결함이었으며, DNS 패킷의 서명에 삽입된 익스플로잇 공격 코드를 통해 이용할 수 있었다. 악성 네임서버가 요청에 따라 이런 패킷을 전송하여 대부분의 보안 장치를 우회하고 마이크로소프트 DNS 서버에 원격으로 액세스할 수 있다. 이 공격은 웜으로 만들어질 수 있다. 즉, 자동화하여 사용자 개입 없이 확산시킬 수 있다는 의미다.

PuTTY 힙 오버플로(Heap Overflow)
 
  • 나이: 20년 9개월
  • 도입 날짜: 1999년 1월
  • 수정 날짜: 2019년 10월

PuTTY는 시리얼 콘솔, 터미널 에뮬레이터, 다양한 네트워크 파일 전송 애플리케이션 등의 도구로 구성된 무료 오픈소스 스위트로서, SSH와 기타 다양한 암호화 체계가 내장되어 있다. 본래 유닉스 관리자들이 당연하게 사용하던 일련의 도구를 윈도우와 클래식 맥 OS로 가져오기 위해 개발됐다. 이후 범위가 확대되어 이제는 유닉스 시스템에서도 널리 사용되고 있다. 

PuTTY는 네트워크 연결을 보호하기 위해 고안됐지만 취약성이 숨어 있다는 사실이 발견되었다. 또 다른 형태의 버퍼 오버플로 문제(여기에서는 힙 오버플로)였으며 SSH 키가 너무 짧은 경우에 문제화될 수 있었다. PuTTY가 충돌을 일으키거나 심지어 원격 코드가 실행될 수 있었다.

이 취약성은 EU(European Union)의 EU-FOSSA 프로그램이 수립된 버그 현상금 프로그램의 일환으로 해커원(HackerOne)에 제출됐다. 제출자는 3,645달러의 포상금과 PuTTY팀으로부터 감사 인사를 받았다. 해당 버그는 1999년에 만들어진 PuTTY의 소스 코드의 초기 버전부터 있었던 것으로 알려졌다.

win32k.sys 취약성
 
  • 나이: 23년
  • 도입 날짜: 1996년
  • 수정 날짜: 2019년

2019년, 마이크로소프트 윈도우의 Win32 API에서 2가지 중대한 취약성이 발견됐다. 4월에 발견된 첫 번째는 UAF(User-After-Free) 취약성이다. OS 코딩 오류로 인해 프로그램이 보호되어야 하는 시스템 메모리에 액세스되도록 허용하는 취약점이었다. 이 취약성은 보안 연구원들이 컴퓨터에 대한 통제권을 얻기 위해 이를 이용하던 악의적인 해커들을 발견하면서 발견됐다. 

12월에 발견된 나머지 하나는 OS의 창 전환 기능에 숨어 있던 권한 상승 취약성이었다. 이 취약성도 메모리 누수를 만들기 위해 키입력을 시뮬레이션 하던 능동적인 공격 과정에서 발견됐다.

두 취약성 모두 윈도우 초기부터 존재한 것으로 드러났다. 카스퍼스키(Kaspersky)의 수석 보안 연구원 보리스 래린은 “윈도우 NT 4.0과 함께 WIN32K가 공개되던 시절부터 문제가 있었으며, 당시 성능을 높이기 위해 Win32의 그래픽 엔진의 상당 부분이 사용자 레벨에서 커널로 이동했다”라고 말했다. 

레린은 오래 전 마이크로소프트가 내렸던 결정이 훨씬 광범위한 영향을 미쳤으며 계속 그럴 것이라고 말했다. 그는 “오래 전부터 WIN32K 구성요소는 윈도우에서 발견된 모든 커널 보안 취약성의 절반 이상을 차지했다”라고 전했다.

PrintDemon 
 
  • 나이: 24년
  • 도입 날짜: 1996년
  • 수정 날짜: 2020년 5월

프린터는 종류가 많고, 컴퓨터 및 운영체제를 만드는 제조사와 다른 제조사가 만든다. 또 사용자는 연결만 하면 인쇄를 시작할 수 있다고 생각하기 때문에 자주 문제를 일으킨다. 이로 인해 마이크로소프트는 초기부터 프린터 드라이버를 상대적으로 쉽게 설치할 수 있도록 하기 위해 분투했다. 하지만 최근 PrintDemon이라는 버그로 인해 90년대부터 지금까지 영향을 미치고 있을 수 있다는 점이 드러났다.

이 취약성의 핵심은 3가지이다. 먼저 비 관리 사용자가 윈도우 기기에 프린터를 추가할 수 있다. 또 기초 구조로 인해 물리적인 인쇄 장치가 아니라 파일로 인쇄할 수 있다. 마지막으로 윈도우의 중요한 인쇄 서비스는 SYSTEM 권한으로 실행된다. 

즉, 제대로 악용하면 파일 시스템의 어디에나(심지어 권한이 필요한 디렉토리) 실행 가능한 파일을 생성할 수 있는 ‘프린터’ 드라이버를 개발할 수 있다. 지난 수 년 동안 이 디자인 결함을 악용하기 위해 많은 익스플로잇 공격이 생겨났으며 스턱스넷(Stuxnet)이 그 중 하나였다. 이 밖에 2020년에 발견된 PrintDemon이야말로 매우 독특했다. 마이크로소프트가 인쇄 하위 시스템을 다시 구축하는 대신에 몇 년 동안 패치 했기 때문에 나타난 존재였다. 

이에 대해 W인사이더(Winsider)는 “매우 미묘한 파일 시스템 변경을 통해... 특히 재부팅 후 신중하게 만들어진 포트 이름을 통해 그 어느 프로세스도 관여하지 않는 파일 복사/쓰기 동작을 달성할 수 있다. 스풀러(Spooler)가 디스크의 어느 곳에나 [이동 가능한 실행] 파일을 둘 수 있다”라고 설명했다.

-> 블로그 | 아웃룩 버그 사태, 마이크로소프트가 선을 넘고 있다
-> '코드 하나로 수십 억 달러 손해'··· 우주에서 일어난 8가지 버그 사건

오래된 버그들이 전하는 교훈
클린턴 시대의 프린터 하위 시스템에 있는 취약성으로 인해 컴퓨터가 해킹될 수도 있다는 사실을 깨닫게 되면 항상 두려움이 엄습하곤 한다. 그러나 두려움을 넘어 지금 당장 해결해야 하는 오래된 버그에 관해 아는 것이 중요하다. 

그림의 아담 니콜스 수석은 “취약성을 발견했을 때 우리가 하는 일 중 하나는 얼마나 오랫동안 존재했는지 파악하려고 시도하는 것이다. 얼마나 오랫동안 취약했는지 파악하려면 약간의 노력이 더 필요하지만 중요한 정보다”라고 말했다.

니콜스는 광범위한 코드 재사용으로 인해 광범위한 공격면이 발생하고 오랫동안 능동적으로 사용 중인 코드베이스에 악용될 수 있는 취약성이 숨어 있을 수 있다는 사실을 입증한 샌디 클락의 연구를 언급했다. 이 연구에 따르면 대부분의 결함이 코드베이스가 초기에 해결될 것이라는 전통적인 소프트웨어 엔지니어링 믿음으로 인해 지속적으로 남아 있게 된다. 클락의 논문의 제목에도 나와 있듯이 익숙함이 무시로 이어지는 것이다. ciokr@idg.co.kr



2021.06.22

‘20세기부터 있었더라’ 오래된 SW 버그 10선

Josh Fruhlinger | CSO
2021년, 현대 컴퓨팅의 근간에 해당하는 한 시스템에서 취약성이 발견됐다. 공격자가 시스템으로 하여금 임의의 코드를 강제로 실행하게 할 수 있는 취약점이었다. 충격적이게도 이 취약한 코드는 약 54년 전에 작성된 것이었다. 그런데 아직도 이 취약성에 대한 패치가 존재하지 않으며 앞으로도 제공되지 않을 것 같다.

그 이유는 문제의 이 시스템이 컴퓨터 공학 분야에서 이론적으로 매우 중요하지만 실제 컴퓨터로 개발된 적은 없었던 마빈 민스키(Marvin Minsky)의 1967년 범용 튜링 머신(Universal Turing Machine)이었기 때문이다. 민스키가 설계한 후 약 10년이 지난 후 초기 버전의 유닉스(Unix)와 DOS가 등장했고 그 후속작들이 지금껏 사용되고 있다. 최근 발견된, 역사가 오래 된 버그에 대해 알아본다.
 
Image Credit : Getty Images Bank

닛산(Nissan) 텔레매틱스 컨트롤 모듈 베이스밴드 취약성
 
  • 나이: 7년
  • 도입 날짜: 2010년
  • 수정 날짜: 2017년

2011년, 보안 연구원 랄프 필립 웨이만은 스마트폰에서 사용되는 베이스밴드 프로세서에 최근 유입된 결함을 발견했다. 이를 악용하면 해커가 가짜 기지국을 만들어 스마트폰이 여기에 연결하도록 속인 후 네트워크 연결을 가로챌 수 있었다. 스마트폰 제조사들은 이 결함을 상대적으로 신속하게 해결했으며 이내 잊어버렸다.

그러나 한 가지 문제가 있었다. 스마트폰만 이 칩을 사용한 것이 아니었다. “기본적으로 동일한 셀룰러 베이스밴드 칩셋이 닛산 리프(Leaf)와 다른 여러 차량의 텔레매틱스 유닛에 사용되었다”라고 보안 기업 에클립시움(Eclypsium)의 수석 사이버 보안 연구원 제시 마이클이 말했다. (에클립시움과 의견을 같이 하는) 많은 연구원들이 폐차장에서 구한 자동차로 실험하여 해당 취약성을 발견했다.

마이클은 “약 7년 전에 다른 시장에서 공개된 이 취약성이 자동차 분야에서도 발견됐다. 자체적으로 복잡한 공급망을 가진 굉장히 다른 시장 부문이었기 때문에 자동차가 익스플로잇 공격에 취약하다는 사실이 간과됐다”라고 말했다. 이것은 산업 고립화로 인한 현실적인 위험을 보여주는 사례다.

sudo의 바론 사메딧(Baron Samedit)
 
  • 나이: 9년 6개월
  • 도입 날짜: 2011년 7월
  • 수정 날짜: 2021년 1월

유닉스 관리자의 툴킷 중 중요한 도인 sudo 명령은 올바른 호출 권한을 가진 사람에게 강력한 권한을 제공한다. 셸(Shell) 모드에서 sudo를 <code>-c</code> 플래그로 호출한 후 슈퍼유저(Superuser) 권한으로 실행될 일련의 쉘 명령을 입력할 수 있다. 이 모드는 이런 명령에 삽입된 특수 문자가 시스템을 속여 할당된 메모리 버퍼 밖에 코드를 작성하도록 할 수 있다. 결과적으로 루트 권한에 대한 액세스를 제공할 수 있는 버퍼 오버플로 공격에 취약하다.

권한을 가진 이가 시스템을 헤집고 다니지 않도록 이 명령에 대한 헤지도 있기는 했다. 일반적으로 sudo는 이런 특수 문자가 처리되기 전에 인식하여 이런 공격을 방지한다. 하지만, 2011년, sudo에 한 취약성이 실수로 삽입되어 버퍼 오버플로 공격이 가능해졌으며 약 10년 동안 숨어 있었다. 이 결함은 sudo 명령에 있는 것이 아니라 보조 sudoedit 명령에 있었다. 이를 악용하면 사용자가 슈퍼유저 권한을 사용하여 편집 프로그램 자체에 완전한 슈퍼유저 권한을 제공하지 않고도 파일에 액세스하여 편집할 수 있다. 

2021년 1월 퀄리스(Qualys) 블로그에 따르면 이 취약성으로 심각한 권한 상승이 가능하며 패치가 필수적이다. 영향을 받는 시스템으로는 리눅스, 솔라리스, 맥OS 등 거의 모든 유닉스 변종이다.

리눅스 GRUB2 시큐어 부트(Secure Boot) 구멍
 
  • 나이: 10년
  • 도입 날짜: 2010년
  • 수정 날짜: 2020년 7월

BIOS를 대체하기 위해 UEFI가 도입되었을 때, UEFI는 운영체제를 시작하는 부트로딩(Bootloading) 소프트웨어 수준에서 작동하는 공격에 대응하는 기능을 갖춘 보안의 첨단으로 여겨졌다. 그 핵심은 각 부트로더(Bootloader) 프로그램이 정당한지 검증하는 서명된 암호 기법 인증서 인터로크 체인인 시큐어 부트라는 메커니즘이다. UEFI의 루트 인증서는 마이크로소프트가 서명하고 리눅스 배포판은 자체적인 부트로더를 넣으며, 각각은 자체적으로 검증된 인증서가 있다.

하지만 <CSO>의 루시안 콘스탄틴이 설명했듯이 UEFI 지원 인증서를 갖춘 인기 있는 리눅스 부트로더인 GRUB2에는 구성 파일에 삽입된 악성 코드가 악용할 수 있는 버퍼 오버플로 취약성이 포함되어 있다(GRUB2 자체는 서명되어 있지만 로컬 관리자가 편집할 수 있는 구성 파일은 그렇지 않다). 

에클립시움이 발견한 이 보안 구멍을 악용하려면 공격자는 해 대상 기기에 대한 일정 수준의 로컬 제어가 필요하다. 그러나 성공할 경우 해당 컴퓨터가 부팅할 때마다 통제력을 유지할 수 있기 때문에 시스템에서 쫓아내기가 어렵다.

라이언위키(LionWiki) LFI(Local File Inclusion)
 
  • 나이: 11년 11개월
  • 도입 날짜: 2008년 11월
  • 수정 날짜: 2020년 10월

라이언위키는 PHP로 프로그래밍 된 미니멀리즘 위키 엔진이다. 위키피디아(Wikipedia) 등에 사용되는 다른 인기 위키 엔진과는 달리 라이언위키는 데이터베이스를 사용하지 않으며 완전한 파일 기반이다. 간결성이라는 목적에서 볼 때 이는 하나의 강점이지만 상당한 취약성도 발생할 수 있다.

기본적으로 이 엔진에서는 특정 라이언위키 인스턴스를 구성하는 다양한 파일에 파일과 해당 페이지의 URL에 포함된 경로 이름으로 액세스하게 된다. 즉, 올바르게 생성된 URL이 있다면 라이언위키 인스턴스를 관리하는 서버의 파일 시스템 안에서 이동할 수 있다. 이런 시도를 차단하기 위해 URL 필터링 프로비전(Provision)이 마련되어 있지만 IICR(Infosec Institute Cyber Range)의 엔지니어 준 워너는 이것들을 꽤 쉽게 무너질 있다는 사실을 발견했다.

워너는 이 취약성이 일부 교정 노력에도 불구하고 사라지지 않았다고 지적했다. 그녀는 “2009년 7월에 일부 완화책을 시도됐으며, 이후 2012년 1월에 더욱 광범위한 완화책이 적용됐다. 이런 완화책에도 불구하고 코드는 여전히 같은 유형의 공격에 취약했다. 이 취약성은 해당 코드 안에 머무르다가 8년이 지난 후 2020년 10월 완화책을 우회하는 방법과 함께 다시 발견되었다”라고 말했다. 개발 측은 이 버그가 공식적으로 보고된 후 패치했다.

도메인 타임 2(Domain Time II) 측면자 공격
 
  • 나이: 14년
  • 도입 날짜: 2007년
  • 수정 날짜: 2021년 4월

같은 네트워크에 있는 2대의 컴퓨터가 현재 시간에 대해 합의할 수 없다면 여러 골치 아픈 결과가 발생할 수 있다. 컴퓨팅 분야에서 오랫동안 지속된 이 문제를 해결하는 성숙하면서도 널리 보급된 기업용 솔루션이 윈도우, 리눅스, 솔라리스에서 사용하는 클로즈드 소스(Closed Source) 애플리케이션인 도메인 타임 2이다.

도메인 타임 2는 그 존재 기간 동안 매우 심각한 취약성을 내포하고 있었다. 사용자가 설정한 간격 또는 조건에 따라 프로그램이 UDP 쿼리를 해당 소프트웨어 제공사인 GAP(Greyware Automation Products)가 운용하는 업데이트 서버로 전송한다. 서버가 URL로 응답하면 도메인 타임 2가 관리자 권한으로 프로그램을 실행하여 해당 URL에서 업데이트를 다운로드한 후 설치한다.

그러나 악당이 그레이웨어의 업데이트 서버보다 먼저 해당 쿼리에 응답할 수 있게 되면 해당 공격자가 자신의 응답을 전송함으로써 도메인 타임 2로 하여금 자신이 설치하고자 하는 맬웨어를 다운로드하도록 할 수 있었다. 

중간자 공격에서는 공격자가 양방향 통신을 가로챈다. 반면 이 측면자(man-on-the-side) 공격에서는 공격자가 대상 기기로 응답이 침투하는 것을 막을 수 없기 때문에 자신의 응답을 더 빨리 전송해야 한다. 즉, 공격자가 이미 대상 로컬 네트워크에 있는 컴퓨터를 통제하고 있어야 공격이 가능하다. 

단 이 공격을 통해 공격자는 로컬 네트워크 안에서 더욱 중요하고 안전한 기기로 침입할 수 있다. 이 취약성은 보안 기업 그림(Grimm)이 발견했으며, 이 결함이 최소한 2007년까지 거슬러 올라가는 소프트웨어 버전에서부터 존재했다고 지적했다.

리눅스 SCSI 하위 시스템 버그
 
  • 나이: 15년
  • 도입 날짜: 2006년
  • 수정 날짜: 2021년 3월

옛날 사람이라면 IBM PC나 클래식 맥에 하드 드라이브가 연결되어 있던 방식일 수 있는 1980년대의 데이터 전송 표준인 SCSI를 기억할 것이다. 지금도 일부 환경에서는 사용되고 있는 규격이다. 특히 리눅스는 가능한 유연하고 범용적이어야 하기 때문에 이를 필요로 하는 시스템을 위한 광범위한 SCSI 하위 시스템을 보유하고 있다. 

이 모듈은 ‘자동 모듈 로딩’이라는 것을 통해 제공되며, 여기에서 OS가 필요 시 필요한 시스템 코드를 찾아 설치한다. SCSI 드라이브를 리눅스 기기에 연결할 때 필요한 지원 코드를 찾을 필요가 없다는 점에서는 유용하지만 이 코드의 오류를 악용하려는 공격자에게도 유용하다.

사이버 보안 컨설팅 기업 그림은 이 리눅스 SCSI 코드의 버그 여러 개를 2021년 3월에 발견해 공개했다. 하나는 일반 사용자가 루트 권한을 얻을 수 있는 오버플로 취약성이며, 커널(Kernel)의 정보가 사용자 공간으로 유출될 수 있는 오류도 있었다. 이 모든 것들을 이용하여 권한이 필요한 정보를 얻거나 영향을 받는 기기에 DoS 공격을 수행할 수 있었다. 그림은 이 버그가 2006년에 생겨났다고 밝혔으며 “이 모드가 개발될 당시에 만연했던 보안 프로그래밍 활동의 부재를 나타낸다”라고 밝혔다.

SIGRed
 
  • 나이: 17년
  • 도입 날짜: 2003년
  • 수정 날짜: 2020년

DNS는 주요 인터넷 백본 중 하나다. 이 시스템을 통해 컴퓨터는 어떤 IP 주소가 URL과 연결되어 있는지 파악한다. 이 시스템은 계층적이며, 피라미드 형태로 요청이 오르내리면서 “이 컴퓨터의 위치는 어디인가?”라는 질문에 대한 답을 아는 DNS 서버를 찾는다. 그 결과, DNS가 모든 주요 운영체제에 내장됐다.

2020년, 마이크로소프트는 자체 버전의 DNS에 있는 치명적인 취약성을 공개했다. 이 취약성은 코드 속에 17년 동안이나 숨어 있었다. 단 실제로 악용된 증거는 없다. 체크 포인트(Check Point) 연구진이 SIGRed라고 명명한 이 취약성은 윈도우 DNS 서버에 있는 버퍼 오버플로 결함이었으며, DNS 패킷의 서명에 삽입된 익스플로잇 공격 코드를 통해 이용할 수 있었다. 악성 네임서버가 요청에 따라 이런 패킷을 전송하여 대부분의 보안 장치를 우회하고 마이크로소프트 DNS 서버에 원격으로 액세스할 수 있다. 이 공격은 웜으로 만들어질 수 있다. 즉, 자동화하여 사용자 개입 없이 확산시킬 수 있다는 의미다.

PuTTY 힙 오버플로(Heap Overflow)
 
  • 나이: 20년 9개월
  • 도입 날짜: 1999년 1월
  • 수정 날짜: 2019년 10월

PuTTY는 시리얼 콘솔, 터미널 에뮬레이터, 다양한 네트워크 파일 전송 애플리케이션 등의 도구로 구성된 무료 오픈소스 스위트로서, SSH와 기타 다양한 암호화 체계가 내장되어 있다. 본래 유닉스 관리자들이 당연하게 사용하던 일련의 도구를 윈도우와 클래식 맥 OS로 가져오기 위해 개발됐다. 이후 범위가 확대되어 이제는 유닉스 시스템에서도 널리 사용되고 있다. 

PuTTY는 네트워크 연결을 보호하기 위해 고안됐지만 취약성이 숨어 있다는 사실이 발견되었다. 또 다른 형태의 버퍼 오버플로 문제(여기에서는 힙 오버플로)였으며 SSH 키가 너무 짧은 경우에 문제화될 수 있었다. PuTTY가 충돌을 일으키거나 심지어 원격 코드가 실행될 수 있었다.

이 취약성은 EU(European Union)의 EU-FOSSA 프로그램이 수립된 버그 현상금 프로그램의 일환으로 해커원(HackerOne)에 제출됐다. 제출자는 3,645달러의 포상금과 PuTTY팀으로부터 감사 인사를 받았다. 해당 버그는 1999년에 만들어진 PuTTY의 소스 코드의 초기 버전부터 있었던 것으로 알려졌다.

win32k.sys 취약성
 
  • 나이: 23년
  • 도입 날짜: 1996년
  • 수정 날짜: 2019년

2019년, 마이크로소프트 윈도우의 Win32 API에서 2가지 중대한 취약성이 발견됐다. 4월에 발견된 첫 번째는 UAF(User-After-Free) 취약성이다. OS 코딩 오류로 인해 프로그램이 보호되어야 하는 시스템 메모리에 액세스되도록 허용하는 취약점이었다. 이 취약성은 보안 연구원들이 컴퓨터에 대한 통제권을 얻기 위해 이를 이용하던 악의적인 해커들을 발견하면서 발견됐다. 

12월에 발견된 나머지 하나는 OS의 창 전환 기능에 숨어 있던 권한 상승 취약성이었다. 이 취약성도 메모리 누수를 만들기 위해 키입력을 시뮬레이션 하던 능동적인 공격 과정에서 발견됐다.

두 취약성 모두 윈도우 초기부터 존재한 것으로 드러났다. 카스퍼스키(Kaspersky)의 수석 보안 연구원 보리스 래린은 “윈도우 NT 4.0과 함께 WIN32K가 공개되던 시절부터 문제가 있었으며, 당시 성능을 높이기 위해 Win32의 그래픽 엔진의 상당 부분이 사용자 레벨에서 커널로 이동했다”라고 말했다. 

레린은 오래 전 마이크로소프트가 내렸던 결정이 훨씬 광범위한 영향을 미쳤으며 계속 그럴 것이라고 말했다. 그는 “오래 전부터 WIN32K 구성요소는 윈도우에서 발견된 모든 커널 보안 취약성의 절반 이상을 차지했다”라고 전했다.

PrintDemon 
 
  • 나이: 24년
  • 도입 날짜: 1996년
  • 수정 날짜: 2020년 5월

프린터는 종류가 많고, 컴퓨터 및 운영체제를 만드는 제조사와 다른 제조사가 만든다. 또 사용자는 연결만 하면 인쇄를 시작할 수 있다고 생각하기 때문에 자주 문제를 일으킨다. 이로 인해 마이크로소프트는 초기부터 프린터 드라이버를 상대적으로 쉽게 설치할 수 있도록 하기 위해 분투했다. 하지만 최근 PrintDemon이라는 버그로 인해 90년대부터 지금까지 영향을 미치고 있을 수 있다는 점이 드러났다.

이 취약성의 핵심은 3가지이다. 먼저 비 관리 사용자가 윈도우 기기에 프린터를 추가할 수 있다. 또 기초 구조로 인해 물리적인 인쇄 장치가 아니라 파일로 인쇄할 수 있다. 마지막으로 윈도우의 중요한 인쇄 서비스는 SYSTEM 권한으로 실행된다. 

즉, 제대로 악용하면 파일 시스템의 어디에나(심지어 권한이 필요한 디렉토리) 실행 가능한 파일을 생성할 수 있는 ‘프린터’ 드라이버를 개발할 수 있다. 지난 수 년 동안 이 디자인 결함을 악용하기 위해 많은 익스플로잇 공격이 생겨났으며 스턱스넷(Stuxnet)이 그 중 하나였다. 이 밖에 2020년에 발견된 PrintDemon이야말로 매우 독특했다. 마이크로소프트가 인쇄 하위 시스템을 다시 구축하는 대신에 몇 년 동안 패치 했기 때문에 나타난 존재였다. 

이에 대해 W인사이더(Winsider)는 “매우 미묘한 파일 시스템 변경을 통해... 특히 재부팅 후 신중하게 만들어진 포트 이름을 통해 그 어느 프로세스도 관여하지 않는 파일 복사/쓰기 동작을 달성할 수 있다. 스풀러(Spooler)가 디스크의 어느 곳에나 [이동 가능한 실행] 파일을 둘 수 있다”라고 설명했다.

-> 블로그 | 아웃룩 버그 사태, 마이크로소프트가 선을 넘고 있다
-> '코드 하나로 수십 억 달러 손해'··· 우주에서 일어난 8가지 버그 사건

오래된 버그들이 전하는 교훈
클린턴 시대의 프린터 하위 시스템에 있는 취약성으로 인해 컴퓨터가 해킹될 수도 있다는 사실을 깨닫게 되면 항상 두려움이 엄습하곤 한다. 그러나 두려움을 넘어 지금 당장 해결해야 하는 오래된 버그에 관해 아는 것이 중요하다. 

그림의 아담 니콜스 수석은 “취약성을 발견했을 때 우리가 하는 일 중 하나는 얼마나 오랫동안 존재했는지 파악하려고 시도하는 것이다. 얼마나 오랫동안 취약했는지 파악하려면 약간의 노력이 더 필요하지만 중요한 정보다”라고 말했다.

니콜스는 광범위한 코드 재사용으로 인해 광범위한 공격면이 발생하고 오랫동안 능동적으로 사용 중인 코드베이스에 악용될 수 있는 취약성이 숨어 있을 수 있다는 사실을 입증한 샌디 클락의 연구를 언급했다. 이 연구에 따르면 대부분의 결함이 코드베이스가 초기에 해결될 것이라는 전통적인 소프트웨어 엔지니어링 믿음으로 인해 지속적으로 남아 있게 된다. 클락의 논문의 제목에도 나와 있듯이 익숙함이 무시로 이어지는 것이다. ciokr@idg.co.kr

X