가상화 기술의 핵심인 하이퍼바이저(hypervisor)를 샌드박스에 가두어 가상 머신 탈출(virtual machine escape)을 방어하는 연구가 Black Hat USA 2021에 채택되었습니다. Black Hat은 본 학회인 Black Hat USA와 지역 학회인 Black Hat Asia, Black Hat Europe으로 나누어지는데, 이제야 겨우 본 학회에 발을 들였네요. 그동안 계속 떨어지는 바람에 Asia와 Europe만 다녔거든요. 쿨럭...;; 네트워킹하기 좋은 기회인데 코로나 때문에 온라인으로 발표할 예정이라 많이 아쉽긴 합니다. ^^;;;

Black Hat USA 2021 - 발표 내용
Black Hat USA 2021 - 발표자 소개

가상 머신 탈출(virtual machine escape)은 가상 머신에서 동작하는 악성코드(malware)가 가상 머신을 빠져나와 시스템 전체, 즉 호스트(host)와 게스트(guest)에 영향을 미치고 악의적인 행위를 하는 것을 뜻합니다. 가상 머신 탈출은 특히나 Amazon과 같은 클라우드 사업자(cloud vendor)에게 치명적인데, 서비스의 특성상 가상 머신이 사용자에게 제공되고 임의의 코드가 내부에서 실행되기 때문입니다. 악의적인 사용자라면 가상 머신을 임대한 후, 가상 머신의 취약점을 이용해서 탈출할 수 있는 것이죠.

가상 머신 탈출은 이처럼 파급효과가 크기 때문에 #BlackHat 컨퍼런스에 단골로 등장하고 있습니다. 올해 5월에 열린 Black Hat Asia 2021에도 가상 머신 탈출 관련 발표가 있었구요. 앞으로도 문제가 있을 것 같아서 실용적으로 문제를 해결하고자 여러 가지 시도를 했는데, 많은 분들이 도와주셔서 좋은 결과가 나온 것 같습니다. 필드 적용성을 높이려고 현재 동작 중인 시스템은 최대한 수정하지 않았는데, 클라우드 사업자들에게 도움이 되면 좋겠네요. ^^)/

연구 내용이 조금 복잡해서 주요 내용만 간단히 소개해 드리면, 하이퍼바이저는 가상 머신과 직접적으로 연결되어 있습니다. 다수의 가상 머신을 통제하고 서비스를 제공해야 하기 때문이죠. 그런데, 하이퍼바이저는 꽤나 높은 권한에서 동작하므로, 하이퍼바이저에 취약점을 이용해서 가상 머신을 탈출할 수 있습니다. 이를 막고자 제가 만든 경량 하이퍼바이저로 샌드박스(sandbox)를 구성하고, 기존 하이퍼바이저의 권한을 낮춘 후 샌드박스에서 구동하는 것이 핵심 아이디어입니다. 샌드박스를 위해 중첩 가상화(nested virtualization)를 직접 구현했고, 발생하는 부하를 줄이기 위해 Intel 프로세서의 VPID, VMCS Shadowing 같은 기술도 같이 활용했는데... 이 부분은 Black Hat USA 2021 발표와 함께 자세히 말씀드리겠습니다.

끝으로, 항상 지지해 주시는 본부장님과 실장님을 비롯한 동료분들께 감사드립니다. 여러분들의 도움이 없었다면 아이디어도 발굴하지 못했을 겁니다. 앞으로도 많이 부탁드립니다. ^^)-b

ps) 발표는 아래에서 확인하실 수 있습니다.

https://www.blackhat.com/us-21/briefings/schedule/index.html?fbclid=IwAR3TWHTC1UXsa54x9VcdpG82Jdgd0QWgFYgAc5LWqUNxd6CWR6Hp9Dcpvqs#alcatraz-a-practical-hypervisor-sandbox-to-prevent-escapes-from-the-kvmqemu-and-kvm-based-microvms-22875 

 

Black Hat

Black Hat

www.blackhat.com

 

2021년에도 Black Hat Aisa 리뷰 보드로 활동을 하게 되어 보게 된 논문인데, 보안 관련 3대 학회로 손꼽히는 ACM CCS 2020에 채택된 논문입니다. 제목에서도 알 수 있듯이 리눅스 커널 공격에 사용되는 elastic object, 즉 우리말로 옮기면 크기가 가변적인 객체와 관련해서 체계화 연구를 수행한 내용입니다.

Elastic object의 핵심은 구조체 내부에 버퍼나 버퍼의 주소를 가리키는 포인터가 있고, 그리고 길이를 나타내는 필드가 있다는 점입니다. 이러한 특징으로 인해 elastic object의 버퍼 포인터나 길이를 조절하면 임의의 커널 메모리 읽기(arbitrary read)나 범위를 넘겨 읽기(out-of-bound read, OOB read)가 가능하고, KASLR(Kernel Address Space Layout Randomization)을 무력화할 수 있는 커널 함수 포인터나 Stack canary 등을 읽어낼 수 있죠.

Elastic object 공격으로 인한 영향 - 출처: A Systematic Study of Elastic Objects in Kernel Exploitation

사실 이러한 객체는 흔한 듯하면서도 흔치 않은데요, 커널 구조체의 대부분은 크기가 고정되어 있거든요. ^^;;; 이 논문에서는 아래처럼 elastic object를 찾아서 리스트를 만들어 놓고, 이와 관련해서 커널 데이터를 유출할 수 있는 함수들도 정리해두었습니다. 이 과정에서 정적/동적 분석 기법을 활용했다고 하는데, 오탐을 줄이기 위해 함수 리스트 같은 경우는 수동으로(manual) 선정했다고 하는군요.

Elastic kernel objects - 출처: A Systematic Study of Elastic Objects in Kernel Exploitation 
커널에서 유저로 데이터를 전달할 수 있는 함수 목록 - 출처:A Systematic Study of Elastic Objects in Kernel Exploitation

개인적으로 이 논문의 의의는 elastic object 관련 내용을 체계화했다는 것에 있다고 생각합니다. 임의 메모리 읽기나 범위 넘겨 읽기 같은 경우는 논문의 위협 모델(thread model)에도 나와 있지만, 공격자가 이미 임의 메모리 쓰기 취약점(arbitrary memory write)을 가지고 있다고 가정하기 때문에 영향력이 크지 않다고 생각합니다. 사실 임의 메모리 쓰기 취약점이 임의 메모리 읽기 취약점보다 귀하기 때문에 이런 취약점이 더 영향력이 크고 더 유용하거든요. 물론, 제대로 쓰기 위해서는 논문에서 기술한 것처럼, 임의 메모리 읽기 취약점을 이용해서 KASLR을 무력화해야 좀 더 공격 성공 확률이 올라가긴 하지만요. ^^;;;

해결책(mitigation)의 경우도 격리(isoloation) 기법을 사용했는데요, 이 방법 또한 일반적으로 활용하는 방법입니다. 격리를 하면 elastic object만 따로 떨어지는데, 인접해있는 kernel object를 통해 주요 정보를 유출할 수 있는 기회가 적어지긴 합니다. 다만, 메모리 풀(pool)을 분리해야 하므로 코드 수정이 필요하고, 이로 인한 부수효과(side effect)가 어떠한 형태로 나타나는지 심도 깊은 평가도 필요하지요. 논문에서도 성능 등의 여러 관점에서 평가를 하는데요, 실험실(lab) 환경과 실제 운영 환경은 다르기 때문에 논문의 결과가 실제 필드로 적용되기까지는 많은 시간이 필요합니다. ^^;; 참고로 최근에 도입된 꽤 유명하고 대표적인 격리 기법에는 KPTI(Kernel Page Table Isolation)가 있습니다. 바로, 세간을 떠들썩하게 한 멜트다운(meltdown) 취약점을 막기 위해 도입한 것이죠.

리뷰보드 활동 때문에 새해 첫날부터 머리가 아프... 여튼 흥미로운 논문이었습니다.

그럼 새해 복 많이 받으세요!!

이 내용은 부채널 공격(Side-Channel Attack)의 대가인 Daniel Gruss의 졸업 논문인 Software-based Side-Channel Attacks and Defenses in Restricted Environments의 내용을 발췌한 것입니다. ^^;;; 저도 그동안 부채널 공격을 관심있게 보지 않아서 대략적인 내용만 알고 있었는데, 이번에 Black Hat Asia의 리뷰보드(Review Board)가 되면서 관심있게 살펴보게 되었습니다.

사실 최근 부채널 공격의 트렌드는 하드웨어 중심이던 예전과 달리 소프트웨어만으로 공격을 한다는 점인 것 같습니다. Daniel Gruss도 이야기하긴 했지만, 예전에는 암호 연산용 칩이 있을 때 암호 연산을 수행하는 알고리즘의 경로에 따라 전력 소모가 달라진다는 점을 이용해서 전력 측정(Power Measurement) 기법을 사용했습니다. 이러한 공격 기법은 현재 대부분 대비가 되어 있는 상태라 새로운 공격 기법이 등장했는데요, 그게 바로 소프트웨어 기반 마이크로아키텍처 공격(Software-based Microarchitectural Attack) 입니다. 주로 캐시(Cache)와 TLB(Translate Look-aside Buffer)를 이용하는데요, 캐시와 TLB에 대해서는 제가 요약한 캐시 및 TLB 부채널 공격(Cache and TLB Side-Channel Attack) 기법을 참고하시길 바랍니다. ^^;;;

소프트웨어 기반 마이크로아키텍터 공격(Software-based Microarchitectural Attack)

1. 캐시 공격(Cache Attack)

캐시 공격 기법은 연산중에 캐시에 남은 정보를 추출해내는 기법인데요, Evit+Time, Prime+Probe, Flush+Reload, Flush+Flush, Evict+Reload 공격 기법이 대표적으로 최근에 활용된 TLB 공격 기법도 있습니다. 이 부분들은 내용이 많아서 제가 따로 정리한 캐시 및 TLB 부채널 공격(Cache and TLB Side-Channel Attack) 기법를 참고하면 좋을 것 같습니다.

2. 예측자 공격(Attacks on Predictors)

CPU에는 성능을 높이기 위해 다양한 예측자(Predictors)가 들어있는데요, Branch Predictors, Prefetchers, Memory-aliasing Predictors가 있습니다.

  • Branch Predictors: 프로그램을 작성하다보면 루프를 사용하게 되는데요, 루프는 일정한 횟수동안 반복해서 도는 특징이 있습니다. 이러한 루프를 만나면 CPU가 루프의 비교문을 만났을 때 다음에도 루프 안쪽을 실행할 것이라고 예측하고 미리 파이프라인에 명령어를 밀어넣는데, Branch Predictors의 예측을 빗나가게 해서 정보를 추출하는 공격 기법이 Branch Predictor Attack입니다.
  • Prefechers: 코드를 실행하다보면 현재 실행중인 명령어의 다음 명령어가 실행될 것이라 예측하고 성능향상을 위해 명령어와 데이터를 미리 채워놓습니다. Prefecher는 캐시 부채널 공격을 수행할 때 원치 않는 잡음(Noise)를 생성하는 원인이 되기도 하는데요, Prefecher Attack은 직접 이를 이용해서 공격을 수행하기 보다는 잡음을 줄이는 방법으로 활용되곤 한답니다.
  • Memory-aliasing Predictors: 최근 CPU는 실행 능력을 향상시키기 위해 다양한 버퍼(Buffer)를 활용하는데요, Memory-aliasing Predictor는 CPU 내부에 있는 저장 버퍼(Store Buffer)의 값을 캐시에 저장하기 전에 읽어야할 때 이를 읽기 버퍼(Load Buffer)로 옮기는 일을 담당합니다. 저장 버퍼의 값이 읽기 버퍼로 옮겨갈 때 접근 권한(Access Right)가 제대로 검사되지 않으면 정보가 유출될 수 있는데 이것이 바로 Memory-aliasing Predictor Attack입니다. 실제로 Store-to-Leak Forwarding Attack이 이를 이용했습니다.

3. DRAM 공격(DRAM Attack)

DRAM 모듈에 저장된 정보는 Row Buffer를 거쳐서 CPU에게 전달되는데, Row Buffer에 저장된 데이터는 다시 읽었을 때 Row Buffer에 없는 데이터보다 빨리 접근되는 특징이 있습니다. 이러한 공격이 실존하고 이를 이용한 공격이 DRAMA Attack 입니다.

DRAMA 공격 기법 - 출처: Software-based Side-Channel Attacks and Defenses in Restricted Environments

4. 임시 실행 공격(Transient-Execution Attack)

최근 가장 핫한 공격이 바로 임시 실행 공격(Transient-Execution Attack) 인데요, 많이들 알고 계시는 멜트다운(Meltdown), 스펙터(Spectre) 공격 기법이 바로 이 카테고리에 속합니다. 임시 실행 공격은 마이크로아키텍처 공격의 한 종류인데요, 현대 CPU의 비순차실행(Out-of-order Execution)과 예측적 실행(Speculative Execution)을 이용해서 데이터를 유출하는 공격 기법입니다. Daniel Gruss의 전공이기도 하지요.

4.1. 스펙터(Spectre)

스펙터는 임시 실행 공격의 한 종류인데요, 실행 흐름 예측 오류(Control-flow misprediction)과 데이터 흐름 예측 오류(Data-flow misprediction)을 이용합니다. 사실 말보다는 그림으로 보면 더 이해하기가 쉬운데요, 아래는 논문에 있는 스펙터 공격의 흐름입니다.

스펙터(Spectre) 공격 기법 - 출처: Software-based Side-Channel Attacks and Defenses in Restricted Environments

  • 위의 그림에서 보는 것처럼 if문 안의 Index가 0~3일 경우는 참이되어 왼쪽의 Then 부분에 코드가 실행됩니다. 따라서 index의 값으로 data 영역을 접근하고 그 값이 공유 메모리 영역인 shm의 index가 되어 최종적으로 값이 읽혀집니다.
  • 이때, index의 값을 계속 if문이 True가 되도록 실행을 하면 Branch Predictor가 앞으로도 계속 참이 될 것이라고 예측하고 index의 값이 4보다 커도 Then 영역을 미리 실행(Out-of-Execution)합니다. 즉 예측이 실패하는 것이지요.
  • index는 data 영역에서 해당 위치만큼 떨어진 영역을 가리키게 되는데요, 이 index를 주요 정보가 있는 영역, 예를 들어 커널에 저장된 Key가 존재하는 영역이라고 가정한다면 해당 키의 정보가 shm의 Index로 사용되어 캐시에 저장됩니다.
  • 마지막으로 공격자는 shm에서 Index만큼 떨어진 영역이 캐시에 저장되었는지를 확인하는 방식으로 주요 정보에 접근할 수 있습니다.

4.2. 멜트다운(Meltdown)

멜트다운은 임시 실행 공격의 한 종류인데요, 예외(Exception)가 발생했을 때 비순차실행(Out-of-order)의 결과로 데이터가 유출되는 것을 노리는 기법입니다. 역시 그림으로 보는 것이 더 이해가 쉬우니 논문의 그림을 인용하겠습니다.

멜트다운(Meltdown) 공격 기법 - 출처: Software-based Side-Channel Attacks and Defenses in Restricted Environments

  • 위의 그림에서 kernel 부분의 메모리는 접근이 불가능하기 때문에 오류(Exception)이 발생합니다.

  • 이때, 비순차실행 때문에 value가 공유 메모리 영역인 shm의 index로 사용됩니다.

  • 공격자는 스펙터의 공격기법과 같이 shm에서 Index만큼 떨어진 영역이 캐시에 저장되었는지를 확인하는 방식으로 주요 정보에 접근할 수 있습니다.

    지금까지 부채널 공격에 대해서 정리해봤는데요, 최근 부채널 공격은 소프트웨어만 이용해서 공격이 가능한 만큼 파급력이 큽니다. 하지만 다행히도 방어법 또한 마련되어 있는데요, 다음에는 방어법에 대해서 정리해보겠습니다.

    그럼 좋은 밤 되세요 ^^)/

Black Hat은 보안 관련 일을 하시는 분이라면 누구나 한 번쯤은 들어보셨을 산업계 중심의 학회인데요, 수천 명이 참석하는 학회이고 아시아(Black Hat Asia), 미국(Black Hat USA), 유럽(Black Hat Europe)에서 매년 열리고 있습니다. 저도 Black Hat에 발표자로 선정되는 것이 꿈이어서 꾸준히 도전했는데, 논문이 계속 물만 먹다가(?!) Black Hat Asia 2017에 처음으로 논문이 붙었습니다. ^^;;; 그때 발표한 것이 Intel 가상화 기술(VT-x, VT-d)을 이용해서 제가 직접 만든 커널 보호 기술(Shadow-box)이었는데요, Shadow-box에 대한 발표 자료, 백서, 소스코드는 아래에서 보실 수 있습니다.

2017년에 Black Hat Asia에 발표자로 선정된 뒤로 꾸준히 Black Hat Asia에서 발표를 해왔는데요, 2019년에는 Black Hat Asia에 이어 Black Hat Europe에서도 발표를 해서(무려 두 번!!) 더 특별한 한 해였습니다. 그.리.고! 작년 Black Hat Europe 2019의 발표가 대박이 나서 Black Hat Asia 2020에 초청되어 한 번 더 발표하게 되었습니다. ^0^)/ Black Hat은 지난번 학회에서 반응이 좋았던 발표를 골라서 다음 학회에서 다시 발표할 수 있도록 기회를 주고 있는데요, 제가 이번에 당첨이 된 것이지요! 발표 내용은 제가 발견한 신뢰플랫폼모듈(Trusted Platform Module, TPM)의 취약점과 이를 이용하여 마이크로소프트의 비트락커(BitLocker)를 해제하는 내용입니다.

마이크로소프트의 BitLocker는 사용자의 디스크를 TPM과 함께 암호화하여 정보 유출을 막는 보안 소프트웨어인데요, 윈도우즈 7(Windows 7) 이상을 사용하신다면 이를 활성화하여 데이터를 안전하게 보호할 수 있습니다. 마이크로소프트의 비트락커(BitLocker)에서 정보(비트)를 새어 나오게 만든다고 이름을 BitLeaker로 지었는데, 나름 반응이 좋았던 것 같습니다. ^^;;; Black Hat Europe 2019의 BitLeaker 발표 내용과 소스코드는 아래에서 보실 수 있습니다.

저도 처음에 Black Hat의 프로그램 매니저로부터 연락을 받고 조금 얼떨떨했는데요, 좋은 기회를 얻었으니 열심히 해보겠습니다. ^^;;; 그동안 진행했던 내용을 BitLeaker에 다 넣어 만들어서 그런지, Europe에서 발표할 때 체력의 한계를 느꼈는데(후우...), 이번에 한 번 더 탈진할 것 같은 기분(?!)을 느낄 수 있겠네요. 쿨럭..;;;

그럼 Black Hat Asia 2020에서 뵙겠습니다!

학회 링크: https://www.blackhat.com/asia-20/

https://www.blackhat.com/asia-20/

최신의 프로세서들은 대부분 집합 연관 캐시(Set-associative cache)를 가지고 있습니다. 집합 연관 캐시는 캐시를 다수의 캐시 집합(Cache Set)으로 나누어 관리하며, 캐시 집합은 다시 캐시 웨이(Cache Ways) 또는 캐시 라인(Cache Line)으로 나누어서 관리합니다. 일단 간단한 캐시의 구조부터 보시지요. ^^;;; Michael Schwarz의 논문 Software-based Side-Channel Attacks and Defenses in Restricted Environments에서 가져온 그림입니다.

간단한 캐시의 구조 - 출처:Software-based Side-Channel Attacks and Defenses in Restricted Environments 

위의 그림은 워드(word)가 1바이트인 캐시라고 보시면 됩니다. 그림에 따르면 워드가 1바이트이므로 물리 메모리 주소(Physical Address)의 하위 b 비트가 데이터가 저장되는 위치를 나타내는데 사용될 수 있습니다. 그리고 그 상위의 n 비트는 캐시 집합(Cache set)을 선택하는 용도로 사용되고, 현재 그림에는 2의 n승만큼의 캐시 집합이 존재하는 상태입니다. 마지막으로 상위의 남은 비트는 해시 함수를 통해 어떤 값으로 바뀌는데 이를 태그(Tag)라고 합니다. 태그는 캐시의 웨이 영역에 저장되며, 캐시 교체(Cache Replacement)를 수행할 때 태그 정보와 함께 캐시에 접근한 시간, 횟수 등의 정보를 같이 활용하게 됩니다.

그럼 좋은 하루 되세요 ^^

작년에부터 Black Hat Asia의 리뷰보드로 활동하면서 제출된 발표자료를 살펴볼 일이 생겼습니다. 그중에서도 독보적이었던 것이 캐시와 TLB(Translation Look-aside Buffer)를 이용한 부채널 공격(Cache Side-Channel Attack)과 관련된 발표자료였는데요, IEEE Security and Privacy(S&P)와 ACM Conference on Computer and Communications Security(CCS) 등을 거쳐와서 내용 자체는 더할나위가 없는 수준이었습니다. 다만... 제가 부채널 공격을 전혀 모르고 있는 상태였기 때문에, 이 기회에 주요 공격 기법을 정리해봤습니다.

캐시를 이용한 부채널 공격 기법

캐시(Cache)를 이용한 부채널 공격의 요점은 캐시에 데이터가 존재하면 해당 데이터를 DRAM에서 읽어오는 것보다 빠르기 때문에 해상도(Resolution)이 아주 좋은 카운터가 있으면 데이터 접근 시간(Data Access Time)을 측정함으로써 이를 확인할 수 있다는 겁니다. 최근까지 사용된 캐시 부채널 공격 기법은 아래와 같습니다.

Evict + Time 기법

Evict + Time 기법은 공격자가 공격 대상이 접근하는 메모리 영역을 확인하기 위해 시도하는 기법입니다. Evict에서 추측할 수 있는 것처럼 공격 대상이 접근하는 메모리 영역을 모두 캐시에서 제거하고, 공격 대상을 실행해서 특정 동작, 예를 들면 암호 연산(Cryptographic Algorithm)을 수행하고 그에 걸린 시간을 측정하는 것이지요. 만일 Evict된 캐시에 접근한다면 캐시에 존재하는 데이터에 접근하는 것보다 실행 시간이 더 길어지니 이로써 실제로 수행되는 함수나 실제로 접근하는 데이터를 알 수 있습니다. 실제로 OpenSSL AES 알고리즘을 공격하는데 사용되었습니다.

Prime + Probe 기법

Prime + Probe 기법 역시 암호 연산을 공격하는데 사용되었는데요, 시나리오는 아래와 같습니다.

  • 먼저 공격자가 캐시를 기준값(Prime)으로 채워두고,
  • 공격자가 공격 대상을 실행합니다. 이때, 공격대상이 어떤 데이터를 읽었다면 그 데이터가 캐시에 없기 때문에 메모리에서 읽고 공격자가 채워넣은 기준값(Prime)을 Evict한 후에 해당 데이터를 채워 놓습니다.
  • 공격 대상의 실행이 완료된 후에, 공격자가 다시 캐시의 정보를 순차적으로 읽습니다. 이때, 특정 위치에서 시간이 많이 걸린다면, 해당 데이터는 공격 대상에 의해 Evict 되었기 때문입니다. 이를 바탕으로 해당 캐시의 위치를 파악하여 공격 대상이 접근한 메모리의 위치를 확인할 수 있습니다.

Prime + Probe는 공유 메모리가 필요치 않기 때문에, Intel SGX와 같이 고립된 환경도 공격이 가능한 장점이 있습니다. 부채널 공격으로 유명한 Michael Schwarz의 논문에 보면 아래와 같이 표현되어 있습니다.

Prime + Probe Attack - 출처: Software-based Side-Channel Attacks and Defenses in Restricted Environments

Flush + Reload 기법

Flush + Reload 기법은 x86 명령어 중에 clflush를 이용하는 공격 기법인데요, clflush가 논리적 주소(Logical Address)를 기반으로 해당 영역만 캐시에서 Flush할 수 있는 특성을 이용합니다. 공격 시나리오는 아래와 같습니다.

  • 암호 알고리즘이 들어있는 공유 라이브러리(Shared Library)를 clflush로 캐시에서 제거하고,
  • 공격 대상을 실행하여 암호 연산을 실행합니다.
  • 공격자가 공유 라이브러리가 있는 영역에 순차적으로 접근합니다. 이때, 공격 대상이 해당 영역에 접근한 경우, 이미 캐시에 존재하므로 그렇지 않은 영역과 접근 시간의 차이가 발생합니다. 이를 이용하면 접근 시간의 차이를 이용하여 암호 알고리즘이 수행된 실행 흐름이나 접근된 데이터를 확인할 수 있습니다.

Flush + Reload 기법은 물리 주소(Physical Address)를 알 필요가 없는 장점이 있습니다. 아래 그림은 Michal Schwarz의 논문에서 가져온 Flush + Reload 기법과 관련된 그림입니다.

Flush + Reload - 출처: Software-based Side-Channel Attacks and Defenses in Restricted Environments

Flush + Flush 기법

Flush + Flush 기법 역시 clflush를 이용한 기법입니다. Flush + Reload 기법과 차이점은 공격 대상을 실행한 뒤에 캐시에 순차적으로 접근하여 접근 시간을 보는 것이 아니라 순차적으로 clflush를 다시 수행해서 flush 시간을 측정하는 겁니다. 캐시에 데이터가 존재하면 clflush에 걸리는 시간이 길고, 캐시에 데이터가 존재하지 않으면 clflush에 걸리는 시간이 짧은 특성을 이용한 것입니다.

Evict + Reload 기법

Evict + Reload 기법은 clflush가 없는 경우, 캐시에서 알아내길 원하는 정보를 모두 제거하는 Evict를 사용하는 Flush + Evict 기법의 변형입니다. clflush를 직접 쓸 수 없는 Javascript나 clflush 명령어가 없는 ARM 프로세서 등에서 사용할 목적으로 변형된 것이지요.

TLB(Translation Look-aside Buffer)를 이용한 공격 기법

TLB를 이용한 공격 기법 역시 캐시를 이용한 공격 기법과 비슷한데요, 캐시 대신에 TLB를 이용하는 점이 차이점이고 역시나 TLB에 해당 영역의 (논리적 주소->물리적 주소) 맵핑 정보가 저장되어 있으면 접근 시간이 짧다는 특성을 이용합니다. Michal Schwarz가 쓴 Store-to-Leak Forwarding: Leaking Data on Meltdown-resistant CPUs논문에서 Store-to-Load Forwarding과 TLB를 이용하여 주요 정보를 유출하는 예를 보여줬습니다.

Microarchitecture가 그동안 많이 숨겨져 있었고 성능 최적화에 중점을 두고 발전하다보니 보안적인 문제가 다소 있는 것 같군요.

그럼 좋은 하루 되세요. ^^

지난주에 유서 깊은 성균관대학교의 최형기 교수님 연구실에 세미나를 다녀왔습니다. 최형기 교수님 연구실에는 작년에도 방문했는데요, 그때는 가상화 기술(Virtualization Technology)과 관련한 세미나였습니다. 올해는 Black Hat Europe 2019에서 발표한 신뢰플랫폼모듈(Trusted Platform Module)과 보안 위협에 대한 내용으로 방문을 드렸는데, 역시나 연구실 분들의 열정이 대단하시더라고요. 날카로운 질문을 던지실 때마다 답변하느라 진땀을 뻘뻘 흘리다 보니 2시간이 훌쩍 지나있었습니다. ^^;;;

(발표자료는 https://www.blackhat.com/eu-19/briefings/schedule/#bitleaker-subverting-bitlocker-with-one-vulnerability-17245에서 보실 수 있습니다.)

세미나를 마치고 돌아오는 길에 여러 가지 생각이 들었는데요, 무엇보다 열정을 잃지 말아야겠다는 생각을 했습니다. 사실 연구소에서도 허리보다 위 쪽에 있어서 연구만 하기는 어려운 상황이라, 포지션에 대한 고민을 하고 있던 찰나였는데... 최형기 교수님과 그 연구원분들 덕분에 생각이 좀 정리가 되었습니다. 세미나를 즐겁게 들어주셔서 너무 고맙다는 말씀을 드리고 싶고, 교수님과 연구원분들께 모두 좋은 결과가 있으시길 기원합니다.

ps) 사진은 제가 방문했던 성균관대학교 제2공학관입니다. ^^

작년 말에 TPM(Trusted Platform Module)과 관련한 취약점과 이로 인해 마이크로소프트사의 디스크 암호화 기법인 비트락커(BitLocker)가 풀릴 수 있다는 내용을 Black Hat Europe 2019에서 발표했습니다. 그때 앞줄 가까이 앉아있던 친구가 있었는데, 그 친구가 덴마크에서 Version 2라는 IT 전문 미디어를 운영하고 있었군요. ^^;;;

덴마크어로 되어 있어서 구글 번역기를 돌려야 했지만... 쿨럭...;; 내용이 잘 정리되어 있어서 깜짝 놀랐습니다. 기사를 정리해준 Jakob 덕분에 새해 초부터 선물을 받은 기분입니다. 기사는 아래에서 보실 수 있습니다(하지만... 덴마크어라 언어의 장벽이....).

그럼 좋은 하루 되시고, 새해 복 많이 받으십시오. _(_ _)_ 

https://www.version2.dk/artikel/har-du-mistet-adgang-din-bitlocker-partition-maaske-kan-bitleaker-hjaelpe-1089646

 

Har du mistet adgang til din Bitlocker-partition? Måske kan Bitleaker hjælpe

Bitleaker blev præsenteret på Black Hat-konferencen i London. Værktøjet gør det muligt at tilgå Windows-kryptering helt uden autentifikaton.

www.version2.dk

 

Black Hat Asia의 Review Board에 합류했습니다. @0@)-b 가문의 영광이자 저한테는 과분한 기회인데... 열심히 한 번 해보겠습니다! 사실 합류한지는 조금 지났는데요...^^;;; 여러 가지 일도 있고 Black Hat Europe 발표 준비를 해야 해서 이제야 한 자 적어봅니다.

Black Hat 컨퍼런스는 매년 Asia, USA, Europe에서 열리는데요, Asia의 경우는 약 2000명이 다녀갈 정도로 크고 인지도가 높은 산업계 주도의 컨퍼런스입니다. Offensive 관련 주제가 많고 파급력 있고 실용적인 주제를 높게 평가하기 때문에 흥미로운 내용으로 가득 차 있지요. ^0^)/

Black Hat Asia 2020의 CFP가 지난 달에 닫혀서 리뷰가 진행 중인데요, 다른 리뷰어님들께 누가 되지 않도록 열심히 하겠습니다. 사실 논문 편수가 300건이 넘게 제출돼서, 제가 맡은 트랙만 리뷰하는데도 편수가 꽤 되는군요. 부담이 벌써부터... 쿨럭..;;; 일단 어느 정도 리뷰가 끝난 상태인데, 열심히 하겠습니다. ^^;;;

전체 리뷰어 목록은 Black Hat Asia 2020 Review Board 에서 보실 수 있습니다.

그럼 좋은 하루 되세요 ^^

ps) 조금 내려가시면 가운데쯤 Seunghun Han이라고 되어 있습니다. 쿨럭..;;;

간만에 쓰는 장문의 글이라 세 줄 요약부터 하겠습니다.

  1. Black Hat Europe 2019에 하드웨어 및 펌웨어 TPM과 Microsoft사의 BitLocker 취약점 관련 내용 발표 예정 BitLeaker: Subverting BitLocker with One Vulnerability

  2. 소프트웨어만으로 BitLocker의 주요 키(Volume Master Key, VMK)를 추출한 건 최초이며 관련 데모 영상은 https://youtu.be/H6uAkLC_8kQ 에서 확인 가능

  3. BIOS/UEFI 펌웨어를 최신으로 업데이트 필요. 보증기간이 지나 업데이트가 불가능하면 PIN 옵션과 함께 BitLocker 사용

이하 본문입니다. ^^;; Black Hat Europe 2019가 벌써 다음 주에 열리네요! 이번에도 TPM 취약점으로 #BlackHat Europe에 발표하러 가게 되었는데요, Black Hat Asia에 제출된 논문들을 리뷰하느라 이제야 준비를 거의 마쳤습니다! 이전 발표와 차이점이라면 Microsoft사의 BitLocker와 Intel사의 PTT(Platform Trust Technology) 관련된 내용이 추가된 것입니다. ^^;;; (발표 내용은 Black Hat Europe 2019에서 보실 수 있습니다.)

사실 TPM 취약점은 이미 작년에 USENIX Security를 통해서 공개가 되었습니다. 다만, 같은 류의 절전 모드 취약점이 펌웨어 TPM(Intel PTT)에서도 발견되어 Intel에 관련 내용을 전달하고 이번 발표에 추가했습니다. Intel PTT는 하드웨어 TPM과 달리 펌웨어로 동작하기 때문에 제조사의 입장에서는 별도의 비용이 들지 않고, TPM 2.0의 기능을 갖추고 있어서 저가 제품부터 고가 제품까지 널리 사용되고 있습니다. Microsoft사의 BitLocker 역시 Intel PTT로 구동이 가능하고 가장 중요한 키인 VMK(Volume Master Key)를 하드웨어 TPM이나 펌웨어 TPM으로 암호화하고 있습니다.

하지만, 안타깝게도 TPM 2.0의 취약점으로 인해 암호화된 VMK가 노출되고, 노출된 VMK로 BitLocker로 암호화된 영역을 해제하여 데이터를 읽어낼 수 있습니다. 그동안의 연구들은 TPM에 물리적으로 접근하여 VMK를 읽어냈지만, 소프트웨어만으로 VMK를 추출해 낸 것은 저희 연구가 처음이라 최대한 많은 내용을 발표에 담고 해결책을 제시하려고 노력했습니다. VMK 추출 및 BitLocker 복호화 관련 데모는 BitLeaker Demo 에서 보실 수 있습니다.

그나마 다행인 것은 제조사들이 패치를 진행하고 있으며, 최신의 BIOS/UEFI 펌웨어로 업데이트하면 위협이 사라진다는 점입니다. 하지만, 보증기간이 지난 제품들은 여전히 위협에 노출된 상태이기에 분실이 가능한 모바일 단말의 경우 주의가 필요합니다.

해결방법은 의외로 간단합니다. Black Hat Europe에서도 발표될 예정이지만 BitLocker와 PIN을 함께 사용하면 됩니다. PIN을 활성화하면 TPM이 암호화된 VMK를 해제할 때 이를 사용하기 때문에, TPM 취약점이 존재해도 VMK가 쉽게 노출되지 않습니다. PIN을 활성화하려면 "제어판" -> "시스템 및 보안" -> "BitLocker 드라이브 암호화"로 이동하셔서 "시작 시 드라이브의 잠금 해제 방법 변경"을 클릭하시고 "PIN 사용"을 클릭하시면 됩니다. TPM 취약점이 해결되었는지 아닌지를 고민하고 싶지 않다면, PIN과 함께 BitLocker를 사용하시길 권합니다. ^^;;

Demo - BitLeaker: Subverting BitLocker with One Vulnerability

작년에 아시아 최대 보안 및 해킹 컨퍼런스인 Black Hat Asia 2017 회고라는 제목으로 논문 발표를 하고 온 후기를 작성했는데요, 올해도 운 좋게도 논문이 수락되어 발표하고 왔습니다. ^^;;;

<출처-구글 이미지>


다만... 작년과 다른 점이라면 올해는 논문이 2편이나 수락되어 너무 정신이 없었다는 건데요, 논문 소개를 간략하게 드리자면...

첫 번째 논문은 Intel TXT(Trusted Execution Technology)의 취약점과 관련된 것으로 I Don't Want To Sleep Tonight: Subverting Intel TXT with S3 Sleep에서 보실 수 있습니다. 해당 논문은 보안뉴스에도 소개가 되었는데요, 관련 기사는 보안뉴스-널리 사용되는 tBoot의 슬립모드 통해 인텔 TXT 무력화 가능에서 보실 수 있습니다. (선임 연구원인데... 수석 연구원으로 나와서 갑자기 승진한 것 같은 기분이... 쿨럭..;;;)

<출처-보안뉴스>


두 번째 논문은 작년 Black Hat Asia에서 발표했던 Shadow-Box 의 ARM 버전인데요, ARM 기반의 Raspberry Pi 3에서 ARM TrustZone 기능을 이용하여 커널을 보호하는 기술에 대한 겁니다. 해당 논문은 Shadow-Box v2: The Practical and Omnipotent Sandbox for ARM에서 보실 수 있습니다. Shadow-Box의 경우는 Intel 버전 및 ARM 버전이 모두 GitHub에 공개되어 있는데, Shadow-Box for Intel, Shadow-Box for ARM에서 소스코드를 확인해보실 수 있습니다.

올해는 Black Hat Asia 말고도 세계적으로 유명한 USENIX Security에도 논문이 수락되었는데요, 이 이야기는 다녀온 뒤에 풀겠습니다. @0@

그럼 좋은 밤 되세요 ^^)-b



이번에 운이 좋아서 제가 만든 가상화 기반 운영체제 보호 기술이 Black Hat Asia와 Hack In The Box Security Conference(HITBSecConf)에 둘다 채택되었습니다. 덕분에 3월에는 싱가포르를, 4월에는 네덜란드를 다녀왔는데요, 출장을 다녀왔더니 일이 엄청 밀려있어서 2개월이 지난 지금에서야 회고를 씁니다. ㅠㅠ 해킹 컨퍼런스는 발표가 필수기 때문에 논문이 채택되어도 발표 준비 때문에 시간이 엄청 드네요. ㅠㅠ

HITBSecConf는 사실 작년에도 다녀왔는데요, 작년에는 Bad USB 관련 연구로 다녀왔습니다. 논문이 심사될 당시에 한참 모바일 디바이스의 충전기 해킹 문제로 시끌시끌할 때였는데요, 때마침 제가 제출한 논문이 소형 디바이스로 베터리, 키보드, USB 카드 리더기에 여러 기능을 추가하는 것과 관련된 것이라 운 좋게 채택이 되었습니다. 이전 논문은 IRON-HID: Create Your Own Bad USB 에서 보실 수 있습니다. ^^;;;

이번에 갔을 때 인상적이었던 부분은 컨퍼런스 관계자가 저를 알아봐주고 먼저 인사를 건내줬다는 것입니다. ㅠㅠ 아아... 별 것 아니지만 왠지 너무 고맙더라구요. ㅠㅠ 덕분에 긴장도 풀리고 발표도 잘 하고 올 수 있었습니다. 제가 발표한 내용은 Shadow-Box: The Practical and Omnipotent Sandbox에서 보실 수 있습니다. ^^

<HITBSecConf 2017 - Shadow-Box: The Practical and Omnipotent Sandbox>

이번 학회에서도 귀인 두 분을 만났는데요, 첫 번째 귀인은 NSHC를 운영하고 계신 허?? 대표이사님입니다. 소싯적에 해커로 이름을 날리시고 현재는 회사를 운영중이신데요, HITBSecConf 2017에서 SCADA 해킹 세션도 운영하셨더라구요. 너무 멋졌습니다. ㅠㅠ)-b

<NSHC의 허영일 대표님(가운데)와 BOB 멘토로 활동중이신 신정훈(singi)님(왼쪽)>

두 번째 귀인은 브라우저 취약점 분석에 달인이신 신정훈(singi)님입니다. 정훈님은 현재 BOB 멘토로도 활동 중이신데요, HITBSecConf 2017에서 펨토셀 해킹 관련 내용을 발표하셔서 인기가 폭발이셨어요. 멋졌습니다. ㅠㅠ)-b

두 달이나 지나서 회고를 쓰지만 왠지 학회 발표날 글을 쓰고 있는 듯한 기분이 드네요. 너무 재미있는 경험이었고 내년에도 또 갈 수 있으면 좋겠네요. 그럼 좋은 밤 되세요. ^^)/

제작년부터 연구하던 결과물이 올해 초에 아시아 최대 해킹 컨퍼런스인 Black Hat Asia와 유럽에서 알아주는 해킹 학회인 HITBSecConf에 동시에 되는 바람에 발표를 두 번이나 하게 되었습니다. ^^; 제 자식과 같은 연구 결과물이 널리 알려져서 좋기는 한데, 발표를 준비하는 과정이 너무 힘드네요. 시간도 많이 들고 말이죠. ㅠㅠ

준비하는 과정이 힘들긴 하지만 학회에서 발표하고 나면 보람있고, 재미난 일들 또한 많이 생기는데요, HITBSecConf는 아직 발표하기 전이라 얼마 전에 다녀온 Black Hat Asia부터 정리를 해볼까합니다. Black Hat Asia는 싱가포르에서 제일 좋은 호텔(인지는 잘 모르겠지만 엄청 좋긴했어요 ^^;;)인 Maria Bay Sands 호텔에서 열렸습니다. 그 왜, 사람들이 하늘을 배경으로 사진 찍는… 최상층에 수영장이 있는 호텔이 바로 Marina Bay Sands인데요… 바로 이렇게 생겼습니다.

<Maria Bay Sands - 출처 구글>

학회 발표 후에 시간을 내서 올라가보니… 정말 눈이 휘둥그레지더라구요. 수영장 끝이 하늘에 닿아있는 듯한 느낌이 들어 좋았고, 높은 곳에서 싱가포르 도시 풍경을 보니 뭔가 세상 고민이 다 하찮아지는 듯한 느낌이 들었습니다. 부자들은 정말 좋겠어요. ㅠㅠ 맨날 그런 좋은 곳에서 세상을 내려다 보고 있을 테니까요.

Black Hat Asia는 Marina Bay Sands와 연결되어 있는 Convention Center에서 진행이 되었는데요, 제가 이번에 오픈소스 도구를 시연하는 Arsenal과 최신 보안 기술을 강당에서 발표하는 Briefing이 다 되는 바람에 좀 바쁘게 하루 하루를 보냈습니다. 하루에 다 몰려있으면 좋을 텐데, 각각 다른 날에 잡히는 바람에 좀 피곤해졌네요. ^^;;; 모두가 도와주신 덕분에 Arsenal과 Briefing 모두 다 잘 마무리했구요, 데일리 시큐의 길민권 기자님께서 제가 발표 모습을 보시고 기사를 너무 잘 써주셔서 온라인 신문에도 났습니다. 제가 나온 기사는 바로 이겁니다. 한승훈∙강정환 연구원, 커널 보호기술 실용화 지평 열어.

<데일리시큐에 소개된 Shadow-box - 출처 데일리시큐>

항상 학회에 가면 사람들로 북적이는데요, 이번에는 글로벌 귀인 두명을 만나는 쾌거를 이룩했습니다. @0@ 한명은 Black Hat USA 본 학회와 CTF로 유명한 DefCon을 설립한 Jeff Moss입니다. 거의 해킹 계의 전설이라고 할 수 있는데요, 같이 간 강정환 연구원이 알려주시 않았다면 모르고 지나칠 뻔 했습니다. 그것도 그럴 것이… 왠 외국인이 유모차를 밀고 있더라구요… 역시 전설도… 애기 아빠가 되면… 어쩔 수 없는 듯… 그래도 어쨌든 사진을 찍었습니다.

<세계 최대의 CTF 대회를 여는 DefCon과 세계 최대의 해킹 학회인 Black Hat의 설립자인 Jeff Moss>

귀인 중 다른 한 명은 Anthony Lai인데요, 홍콩에서 VXCON이라는 해킹 학회를 설립한 사람입니다. HITBSecConf의 리뷰어이기도 하지요. Anthony와 찍은 사진은 이렇습니다.

<홍콩 VXCON의 설립자인 Anthony Lai>

이번에 둘 째가 태어나는 바람에 학회 기간 동안만 있다가 와서 돌아오는 길이 너무 아쉽더라구요. ㅠㅠ 다음에는 좀 더 있다가 오면 좋을 것 같아요. 이제 올 해 마지막 출장이 될 것 같은 HITBSecConf가 남았는데요, 작년에 이어서 두 번째로 초청받은 거라 뭔가 기분이 이상하네요. 작년에는 긴장되고 설레었는데, 지금은 한 번 가봐서 그런지 그냥 편안한 느낌이에요. ^^; 여튼 가서 열심히 하고 오겠습니다.

그럼 좋은 하루 되세요 ^^.

ps) HITBSecConf로 가는 비행기에서 이 글을 적고 있었는데… 발행할 시점에는 이미 HITBSecConf 발표도 다 끝났네요. 흑… 이제 회사로 가야하는 건가.. ㅠㅠ

100년만에 쓰는 글인 것 같습니다. ^^)/ 그간 많은 일이 있었는데요, 지난번에 저는 여전히 하고 싶은 일을 하면서 살고 있습니다 - 4편 말씀드렸듯이 5월에 글로벌 컨퍼런스 발표가 잡혀서 정신없이 달려왔습니다. 헥헥... 응원해주신 많은 분들 덕분에 발표를 무사히(?) 끝내고 왔습니다. 외국 애들이 질문하려고 줄까지 서는 바람에 좀 등에 식은 땀이 났던 것만 빼면 말이죠. ^^;;;;

발표만 끝나면 이제 좀 조용해질까 했는데, 이번에는 제가 만든 다른 자식에 버그가 발견되는 바람에 또 정신없이 하루 하루를 보내고 있습니다. 아우, 올해는 그냥 계속 정신없을 것 같네요. 할 것도 많은 데 벌써 6월이라니.... OTL...

외국 보안 학회는 몇 번 참석했는데, 확실히 그냥 들으러 가는 것과 논문내서 스피커로 초청되어 가는 것과는 차이가 있더라구요. 학회를 주체하는 애들이 얼마나 치밀하게 발표 스케줄을 조절하는지도 알게 되었고, 나름 스피커라고 대접도 해줘서 나름 좋았던 것 같습니다. 준비하는 게 엄청 힘들지만 기회가 된다면 다시 한 번 가보고 싶다는 생각을 할 정도로 말이죠. ^^)/

아우, 시차 적응이 안되서 이만 자러가야겠네요.

그날의 기억이 생생한 사진 두 장 올립니다.



그럼 좋은 밤 되세요. ^^

제가 어쩌다보니(?) 세계 해킹 컨퍼런스 중에 하나인 HITBSecConf 2016에서 논문을 발표하게 되었습니다. ㅠㅠ 완전 가문에 영광이네요. ㅠㅠ 취미로 끄적끄적했던 작업이 이렇게 빛을 보게 되어 정말 기쁩니다. ㅠㅠ 발표 내용은 사실 좀 old school이라 크게 새로울 것은 없는데요, 기존의 기법들을 좀 더 완전하게 만들었다는데 의의가 있지 않나 생각합니다.

발표와 관련 내용은 아래 링크에서 확인할 수 있습니다.

http://conference.hitb.org/hitbsecconf2016ams/sessions/iron-hid-create-your-own-bad-usb-device/

너무 신나네요. 그런 의미에서 오늘은 고기 파티를... 쿨럭..;;;

그럼 좋은 하루 되세요. >ㅁ<)/~

얼마 전 제가 쓴 64비트 멀티코어 OS 원리와 구조의 A/S건으로 보안 프로젝트 카페에 가입을 하게되었는데요, 배울 내용이 많아 종종 들러서 공부를 하고 있습니다(감사합니다. 보안 프로젝트 선배님들 ^^). 오늘도 아침에 일어나 애기가 자는 사이 뭐라도 배울 게 없나 훑어보고 있었는데요, 재미있는 내용을 발견했습니다.

Kioptrix » Downloads 2014-02-08 09-20-39

할만한 해킹 첼린지 문제라는 글인데요, kioptrix라는 사이트에서 제공하는 가상머신 이미지를 구동시켜 루트권한을 얻는 겁니다. 제가 이런 류의 첼린지에 좀 흥미가 있어서 관심있게 봤는데요, 혹시 저 말고도 관심있는 분들이 계실까봐 링크를 걸어둡니다. ^^

그럼 좋은 하루 되세요 ^^

ps) 사실 아직 다운로드 받아서 해본 건 아니라... 내용이 어떤 지는 잘 모릅니다. ㅠㅠ 애기가 푹 자는 저녁이나 해볼 수 있거든요 ㅠㅠ

개인적인 사정 때문에 MD5 Hash Collision에 대해서 찾아보다가 재미있는 글을 찾았습니다. "안전한 패스워드 저장"에 관한 글인데요, 원문은 http://helloworld.naver.com/helloworld/318732 에서 보실 수 있습니다. ^^


내용을 간단히 요약하면 단방향 해시 함수(SHA-256과 같은...)를 사용하면 좀 안전하게 암호를 저장할 수 있는데요, 여기에 Salt 추가와 Key Stretching을 사용하면 보다 더 안전하게 저장할 수 있다는 이야기입니다. ^^ 기회가 되면 한번 써먹어봐야겠군요. ^^


그럼 좋은 밤 되세요 >ㅁ<)-b

+ Recent posts