본문 바로가기

일상

제 3회 SSTF 후기

기업에서 주최하는 행사에 참석을 한 것은 이번이 3번째입니다. 맨 처음은 인코어드 회사에서 주최했던 에너지 해커톤이었고, 두 번째는 테조스에서 주관했던 블록체인 캠프였습니다. 각 행사마다 배울 수 있었던 내용이 많았습니다. 에너지 해커톤에서는 처음으로 다른 사람과 협업하여 작업하는 방법과 IoT 기술을 처음으로 다루어 보았고, 블록체인 캠프에서는 블록체인이 어떠한 것이고 이를 활용한 앱을 만드는 작업을 배울 수 있었습니다. 이 과정에서 함수형 언어인 Ocaml을 배웠습니다.

SSTF에 참가한 이유는 포럼이 어떻게 진행되는지 알고 싶기도 했고 보안과 관련된 내용을 배워보고 싶어서였습니다.

해당 포럼의 경우 8월 20일 날 진행되었으나 글을 다듬어 한다는 생각으로 미루다가 1달 정도 지나서 올라오게 되었습니다.

저는 보안 전문가가 아닙니다. 키노트와 관련된 내용은 제가 슬라이드와 강사님께서 말씀하신 내용을 통해 제 나름대로 정리한 내용이기 때문에 오류가 있을 수도 있습니다. 해당 내용을 지적해주시면 수정하도록 하겠습니다.

해당 포럼은 삼성 서울 R&D 캠퍼스에서 열렸으며 선바위역에서 해당 장소까지 셔틀 버스를 운행하였습니다. 셔틀 버스에서 내리고 연구소 건물을 보았을 때 대학 캠퍼스 느낌을 받았습니다. 행사 시작은 9시 30분부터였는데, 9시에도 사람들이 굉장히 많았습니다.

사전 등록을 한 사람과 현장 등록을 하는 사람을 나누어서 진행하였으며, 사전 등록을 한 사람은 전날 SMS로 바코드를 보내주었고 해당 바코드를 통해 빠르게 등록을 할 수 있었습니다. 명찰을 미리 만들지 않고 현장에서 바코드를 찍어서 바로 인쇄해 발급해주었습니다. 명찰에는 이름, 소속, 직책, 고유 번호가 포함되어 있었습니다.



포럼의 시작



조승환 부사장님께서 환영사를 시작하시고, 최승범 전무님께서 이 SSTF를 운영하는 Samsung Research 에 대해서 무슨 일을 하고 있는 그룹인지에 대해 간략하게 소개해주셨습니다. 해당 그룹은 크게 AI, Data Inteligence, 5G와 6G, Robot, Tizen, Life core & Wellness, Next generation Visual Technology, Security 분야에서 연구를 하고 있으며 여기서 연구된 기술들이 우리가 사용하는 스마트폰이나 가전제품 등에 탑재가 된다고 소개를 해주셨습니다.

키노트

Building Trust through Security

해당 연설은 두 전무님께서 진행해주셨으며 삼성에서 자사의 제품들의 신뢰를 일반인들에게 어떻게 제공하는지에 대해 소개해주셨습니다.

기술적인 측면과 사회적인 측면을 모두 고려하여 사람들이 쉽게 사용하면서 안전하게 사용할 수 있게 함으로 사람들이 삼성 제품에 대해 믿을 수 있도록 하고 있다고 하셨습니다. 이 때 보안의 기본 원칙인 기밀성(Confidentiality), 무결성(Integrity), 가용성(availability)을 바탕으로 하여 Protection, Detection, Analysis, Preventation의 과정을 통해 보안 취약점을 해결하고 있다고 알려주셨습니다.

그리고 이 과정에서 삼성 내부에서 AI를 활용한 위협 분석이나 자동화를 통한 코드 분석 등의 연구가 진행되고 있으며 개발 과정에서 보안 관련 문제를 해결하기 위해서 SDL(Security Development Life-cycle)을 도입하고, 이를 지원하기 위해 SSMS라는 서비스를 만들어 사용하고 있다는 내용으로 마무리 되었습니다.

이 연설을 통해 삼성이 어떤 식으로 보안 문제에 접근하는지와 해당 문제를 어떻게 해결해나가는지에 대해서 배울 수 있었습니다.

Building Trustworthy Software Foundation with Hardware Security Mechanisms

해당 연설은 Georgia Institute of Technology에서 교수를 하고 계시는 김태수 교수님께서 진행해주셨습니다. 하드웨어(CPU)에서 제공하는 Instruction을 활용해 어떻게 하면 안전한 소프트웨어를 만들 수 있는지에 대한 내용이었습니다.

강연의 시작은 무어의 법칙이었습니다. 무어의 법칙이란 칩에 들어가는 트랜지스터의 수가 해마다 2배씩 증가한다는 법칙으로 지금은 이 법칙이 들어맞지는 않지만 꾸준하게 증가하고 있습니다. 과거에는 이렇게 집적도가 증가하면서 CPU의 Clock Speed가 이에 맞춰서 빨라졌으나 지금은 Clock Speed 부분을 늘리기보단 코어의 개수를 늘린다거나 혹은 새로운 Extension을 구현하는데 사용이 되고 있으며, 이 Extension을 잘 활용하여 보안측면에서 안전한 소프트웨어를 구현할 수 있으며 그에 대한 예시를 들어주셨습니다.

CPU 설계를 할 때 보안을 생각하지 않고 성능을 올리는 것에 집중하여 여러 보안 문제가 발생하였고 여러 매체에서 이에 대해서 다룰 정도로 심각하였습니다. 추측실행(Speculative Execution)으로 인해 Meltdown과 Spectre 문제가 발생하였고, Hyper-Thread로 인해 MDS 공격이 발생하였으며, Last Level Cache, prefetch, TSX 등으로 인해서 ASLR을 우회할 수 있는 문제가 있었습니다.

TSX란 Transactional Synchronization Extensions으로 xbegin과 xend 사이에 있는 코드를 병렬로 실행하면서 오류가 발생했을 경우 해당 실행을 모두 abort를 시키는 것입니다. 여기에 추가로 매핑되지 않은 커널 주소로 접근하는 경우에는 유효하지 않는 주소이므로 Page Fault가 발생하는데 이 과정은 Page Entry를 순회하면서 해당 메모리 주소가 존재하지 않는 것을 확인하고 Page Fault를 발생합니다. 반면 매핑된 커널 주소로 접근하는 경우에는 접근 위반으로 인해 Page Fault가 발생하고 Page Entry를 순회하면서 해당하는 메모리 Page를 찾고, 이를 TLB에 캐싱한 다음에 권한을 확인하여 Page Fault가 발생합니다. 이렇게 주소의 매핑 여부에 따라 발생하는 시간 차이가 있으며 이것과 TSX를 연계하면 커널 주소를 알아낼 수 있다는 내용입니다.

해당 공격에 대한 자세한 설명은 아래 동영상을 참조하시면 되겠습니다.

https://www.youtube.com/watch?v=rtuXG28g0CU

공격 용도로 사용된 TSX를 보호하고자 하는 코드에 적용을 하면 이 코드를 안전하게 사용할 수 있다는 내용입니다. 즉 해당 코드가 실행되다가 중간에 오류가 발생하면 해당 블럭의 코드 실행이 모두 취소되기 때문에 안전한 사용이 가능합니다.

그리고 2번째로는 PT(Intel Process Tracer)에 대한 내용이었습니다. 이 기능은 디버깅을 위해서 사용되는 특징으로 Control Flow Graph에서 Indirect Control Flow를 기록하는 것입니다. 모든 내용을 기록하지 않기 때문에 Overhead가 적다는 장점이 있습니다. 이를 활용하면 Control Flow Integrity(CFI)를 체크할 수 있으며 공격 기법 중 하나인 ROP를 막을 수 있습니다. 즉 컴파일 시에 CFG를 생성해서 런타임과의 동작을 비교해 잘못된 경로로 Transition이 일어났다면 공격이 발생했다고 볼 수 있습니다.

다만 CFI를 구현하는데 있어서 Static Analysis 만으로는 정확한 Call을 알 수 없다는 점이 있습니다. 예를 들어 call *%rax 와 같은 Indirect Control-flow Transfer(ICT) 구문이 있을 때 rax값이 무엇이던지 될 수 있기 때문에 이를 모두 확인할 수 없습니다. 이 문제를 해결하기 위해 Unique CFI라는 것을 도입하였고, 주요 아이디어는 기록된 PT Trace 내용과 Control-Dependent Data를 사용하는 것입니다.

PT 기능이 원래 디버깅을 위해 나온 기능이기 때문에 비동기적으로 동작하므로 중요한 시스템 콜이 호출되는 경우에 실행할 때 동기화를 시켜주는 방식을 사용해서 오버헤드를 감소시켰습니다. 관련된 논문은 아래를 참조하시면 될 것 같습니다.

https://dl.acm.org/citation.cfm?id=3243797

앞서서 살펴본 2가지 Extension은 보안과는 관련이 없는 기능이지만 이를 활용하여 보안을 지킬 수 있는 방법에 대해 살펴봤다면 다음에 소개해주신 2가지 Extension은 보안과 직접적인 연관이 있는 기능이었습니다.

MPK(Memory Protection Key)의 경우 페이지 권한을 빠르게 바꿀 수 있는 기능으로 기존에는 mprotect 함수를 사용해서 커널 단위까지 내려간 다음에 페이지 권한을 수정하였다면, MPK의 경우에는 유저 단위에서 바로 바꿀 수 있어서 더 빠르게 바꿀 수 있습니다. MPK는 레지스터를 사용하며 읽기 권한과 쓰기 권한을 각각 1bit씩 활용하며 32bit 레지스터이기 때문에 최대 16개의 페이지를 관리할 수 있습니다. 그리고 해당 동작이 비동기적으로 일어난다는 점이 있습니다. 이를 해결하기 위해서 Key virtualization과 Synchronize API를 제공해주는 방식으로 이러한 단점을 해결하였습니다.

마지막 기능은 SGX 기능입니다. 해당 기능은 코드나 데이터가 노출되는 것과 수정되는 것을 막는 기능입니다. 그래서 신뢰하지 않는 환경으로부터 프로그램을 보호할 수 있습니다. 즉 OS나 다른 프로그램이 해당 영역에 접근을 할 수 없게 하고, 해당 영역의 무결성 체크 및 실제 SGX CPU에서 실행되고 있는지까지를 확인합니다. 이를 사용하면 Tor를 안전하게 사용할 수 있는데, 기존에는 공격자가 Tor 릴레이를 공격하여 정보를 본다거나 패킷을 조작할 수 있었으나 이 기술을 사용하면 해당 작업이 불가능하기 때문에 안전한 사용이 가능해집니다.

해당 기술과 관련된 내용은 Intel에서 제공하는 문서를 참조하시기 바랍니다.

https://software.intel.com/sites/default/files/managed/c3/8b/intel-sgx-product-brief-2019.pdf

해당 강연을 통해서 소프트웨어 개발을 하더라도 하드웨어에 대한 이해가 필요하며 해당 내용을 바탕으로 코드를 작성한다면 해커의 공격으로부터 안전한 소프트웨어를 만들 수 있다는 것을 알 수 있었습니다.

이렇게 해서 오전 일정이 완료되었습니다.

점심 식사

대학교 식당과 비슷하게 여러 메뉴가 있어서 그 중에 하나를 선택해서 먹을 수 있도록 되어 있었습니다. 다만 차이점이 있다면 학교 식당은 3 종류까지 배식하는 것을 보았는데 여기는 5 종류가 되는 메뉴가 있어서 선택의 폭이 더 넓었습니다.

해당 음식에 들어 있는 염도를 알려주는 것이 신기했습니다.



키노트

On the Difficulty of Automated Vulnerability Discovery on Binary Programs

해당 연설은 Arizona State University에서 교수를 하고 계시는 Ruoyu (Fish) Wang 교수님께서 진행하셨습니다. 이 교수님은 바이너리 프로그램을 분석하는데 사용하는 Angr라는 툴을 개발한 사람입니다. CTF Write Up을 찾아보면 일부 리버싱 문제를 해당 툴을 사용해 해결하는 내용이 있을 정도로 꽤 유명한 툴입니다.

해당 강연의 경우 한국분이 아니셨기 때문에 동시 통역을 제공해주었습니다. 다만 교수님의 말이 너무 빨라서 통역이 이를 따라 잡기 위해서 일부 부연 설명하는 부분의 통역을 생략한 점이 아쉬웠습니다.

대략적인 내용은 Fuzzing을 넘어서서 Static Analysis를 통해 취약점을 찾아내며, 이를 좀 더 빠르게 만들기 위해서 어떠한 노력을 했는지와 앞으로의 전망에 대해서 설명해주셨습니다.

Fuzzing의 단점이 Native한 실행과 비슷한 속도가 나와야 하며, 좋은 품질의 샘플 데이터가 있어야 하며(해당 샘플 데이터를 가공하여 새로운 입력 데이터를 생성하기 때문), Crash나 Memory Leak과 같은 에러가 발생하여 빠르게 피드백을 해줄 수 있어야 한다는 점 등이 있습니다.

그에 반해 Static Analysis의 경우에는 코드의 실행 과정을 분석하는 것이기 때문에 랜덤성에 의존할 필요가 없지만 시간이 너무 오래 걸린다는 단점이 있습니다. 과거 Fuzzing도 시간이 매우 오래걸렸으나 2014년에 AFL이 등장하면서 속도가 매우 빠르게 향상되었으므로 Static Analysis도 언젠가는 빨라질 수 있는 기술이 나올 수 있을 것이라고 긍정적인 견해를 보여주셨습니다.

Angr를 개발하는 과정에서 어떠한 테크닉을 활용해서 시간을 줄일 수 있는지에 대해 간략하게도 설명해주셨습니다.

이 강의를 통해서 Fuzzing과 Static Analysis에 대한 기초적인 이론과 최종적으로 어떤 식으로 실행 파일의 취약점을 찾을 것인가에 대한 방식에 대해 알 수 있었습니다.

Best Practices and Lessons Learned from Security Consulting

해당 연설은 Theori라는 보안 회사의 CEO인 박세준 대표님이 진행하셨습니다. 이 내용에서는 Offensive Security가 무엇인지와 다른 회사에 보안 컨설팅을 해주면서 대체적으로 어떤 문제점들이 많았는지와 이를 어떤 식으로 해결하였는지에 대해서 사례를 중심으로 설명을 해주셨습니다. 이 때 하나의 회사를 기준으로 전부 설명하는 것이 아닌 의뢰 업체의 업종의 종류에 따라 나누어서 설명하여 각 업계별로 보안 쪽에 치중해야하는 분야가 차이가 있다는 것을 알 수 있었습니다.

세션

Researches and Activities for Offensive Security in Samsung Research

삼성에서 제품의 보안을 지키기 위해서 사용하는 방법에 대해 좀 더 상세하게 설명을 해주는 내용이었습니다. 기존에는 Depensive Security의 형태였다면 지금은 Offensive Security의 형태로 바뀌어가고 있습니다.

소스코드를 생산하는 과정에서 버그를 잡기 위해서 보안 개발 프로세스(SDLC)를 도입하였고, 기존에 Jira와 Confluence를 사용하였으나 현재는 자체 개발한 SSMS를 사용한다고 하였습니다.

SSMS에는 AVAS라는 자동화된 취약점 분석 툴이 있는데, 이 툴은 CVE라는 취약점 보고서를 활용하여 학습을 시킨 다음 소스코드에 취약점이 있는지와 있다면 어떤 줄에 있는지까지 표시를 해주어 개발자가 해당 코드를 수정할 수 있게 도와줍니다.

좀 신선했던 부분이라면 트위터의 트윗으로부터 취약점 정보를 가지고 오는 방법이었습니다. 하나의 트윗이 입력으로 들어오면 불필요한 단어(Yes)들을 제외하고 핵심 단어(Intel, vuln)와 새로운 단어(Meltdown)를 남겨서 어떤 환경에서 새로운 취약점이 발생하였는지를 알아내는 방법이었습니다.

그리고 취약점이 발생하는 부분을 분석한 결과 비슷한 형태의 취약점이 계속 발생하는 것을 확인할 수 있었고 이를 지능화하여 찾는 방식으로 구현하여 사용 중이라고 합니다.

어떻게 보면 회사에서 만든 기술이고 자기들만의 노하우인데, 이를 공개해주는 삼성의 대범한 모습을 볼 수 있었던 세션이었습니다.

Panel Discussion

아무래도 AI 부분이 뜨고 있는 분야이다보니 이와 관련된 질문이 많이 나왔습니다. 교수님들께서는 아무래도 이 AI 분야에 대해서는 약간 부정적으로 보고 계셨으며, Specific한 용도의 AI는 성공을 할 수 있겠지만 범용적으로 사용할 수 있는 AI는 아무래도 힘들 것이라는 내용을 이야기 하셨습니다.

그리고 연구실에 오는 학생들을 보면 연구를 할 때 AI가 필요하지 않을 것 같은 분야인데 억지로 AI를 접목시키려고 하는 학생들이 많다고 하시면서, 기존의 여러 가지 방식들로 먼저 접근을 해보고, 그 접근 결과를 토대로 AI를 사용했을 때 해당 결과를 개선할 수 있는지 확인한 이후에 AI를 사용하는 것이 필요하다는 말씀도 하셨습니다.

기타 이벤트

이외에도 CTF 행사, 연구 발표, 포스터 발표와 같은 보안과 관련된 행사를 진행하였습니다. 그래서 강연만 듣는 것이 아니라 사람들이 참여할 수 있었습니다. 약간 아쉬운 점이 있다면 일부 연구 발표 시간과 키노트 시간이 겹쳐서 연구 발표 내용을 1개만 들을 수밖에 없었던 점이 아쉬웠습니다.

전체적인 정리

처음 가보았던 포럼이었기 때문에 비교를 할 수가 없지만 이 포럼의 경우 저에게 매우 유익하였습니다. 보안 쪽에 관심이 있긴 했지만 지식이 웹 쪽에 치우쳐져 있기도 했고, 관련 개념에 대해서도 제대로 알고 있지 않았는데 이 포럼을 통해서 좀 더 넓은 시야를 가질 수 있게 되었습니다.

다음 달에 삼성에서 Open Source Conference를 진행하는데 그 날 오전부터 저녁까지 수업이 있어서 참석하지 못한다는 점이 아쉽습니다. 해당 행사도 SSTF와 동일하게 Samsung Research에서 진행하기 때문에 충분히 좋은 프로그램으로 구성했을 것이라고 생각합니다.