2017 Secuinside에 못 가신 분들을 위해 올해 콘퍼런스에서는 무슨 강의를 하였는지 조금이나마 보여 드렸습니다. 앞서 얘기하였듯이 발표자의 사정에 의해서 혹은 콘퍼런스를 직접 봐야지만 알 수 있는 내용은 제하였습니다. 비록 몸은 못 갔지만 흥미롭고 재미있는 강의들을 여기에서 만나보시고 조금이나마 그 뜨거웠던 현장 분위기를 느껴보길 바랍니다. 오늘은 2017 Secuinsid 세션 강의 그 마지막 편입니다.
스마트 자동차 해킹에 대해 알고 싶어요! - 이승진(beist)
스마트 자동차 보안 연구는 최근 중요하게 생각되는 분야 중 하나다. 자동차는 모니터로 상태를 바로 볼 수 없으므로 다루기 어려울 뿐이지, 많은 펌웨어와 CPU가 존재하기 때문에 실제로 컴퓨터와 동일하다. 찰리 밀러나 크리스발라섹이 자동차 보안 연구를 시작하면서 자동차 보안이 주목받기 시작했고, 그 이전에는 워싱턴 대학교에서 연구하기도 했다.
자동차 해킹은 일단 차가 있어야 하므로 비용적인 측면에서 진입 장벽이 높다. 하지만 막상 자동차를 연구하면 일반적으로 쓰이는 리눅스나 암, 밉스, 파워피시 등 다양하게 쓰인다는 것을 알 수 있다. 더불어, 리버싱이나 쉘 코드 작성하는 등 기존의 해킹 방법과도 별 차이가 없다. 자동차 해킹은 공격 시나리오가 다양하게 나올 수 있는데, 조금 좋은 자동차 같은 경우는 Telematics 같은 기능이 들어있어 정보가 서버에 실시간으로 날아가기도 한다. 특히나, 요즘 스마트 자동차의 여러 기능은 스마트폰과도 연결되어 있을 수 있어 전화번호만 알아도 해킹할 수 있다. 즉, 자동차 해킹의 경우 원거리 공격, 모바일, 물리적 공격 등 다양한 시나리오를 예상할 수 있으며, 차가 비싸서 그렇지 막상 해보면 크게 일반적인 해킹과 별다를 바가 없다. 하지만 해킹을 당했을 때 문제다. 만약, 컴퓨터는 자신의 컴퓨터에 중요한 자료가 없다고 해서 그냥 대수롭지 않게 넘어갈 수 있겠지만, 인프라 시스템이나 자동차 같은 경우는 다르다. 특히, 자동차는 인명 피해로 이어질 수 있어 보안에 더 관심을 둬야 한다고 본다.
공격 포인트는 펌웨어를 업데이트할 때나 Telematics 기능의 TCU, 차량에 있는 내비게이션 기능과 오디오 기능이 합쳐진 AVN, 타이어의 기압을 알려주는 TPMS 등이 있다. 또한, 만약 차량 내에 USB 포트가 있다면 더할 나위 없는 공격 포인트다. 이 중에서도 TCU와 AVN, Digital Radio는 주의 깊게 봐야 할 부분이다.
특히나, TCU는 서버와도 통신하고 모바일과 연결하여 사용할 수 있는 기능이 존재하여 어떤 면을 봤을 때도 위험하게 다뤄질 수 있다. 예를 들어, SMS을 송수신을 할 때 TCU의 parser가 해당 메시지를 가져와 사용자에게 보여준다. 이 과정에서 sander의 길이를 가지고 있는 필드에서 일정 길이의 값을 특정 버퍼에 복사한다. 이때, 가져오는 값, 사용자가 준 값을 무조건 신뢰하여 값을 그대로 받음으로 문제가 생길 수 있다. TCU버그 같은 경우는 원격에서 번호만으로 해킹할 수 있기 때문에 상당히 크리티컬 하다. 단순히 페이로드가 담긴 메시지를 보내면 통신사에서 이를 필터링하여 메시지가 가지 않는다. 이때문에 이러한 필터링을 우회하여 공격에 성공하기도 했다. 이 외에도 가짜로 통신 지점을 만들어 통신사를 거치지 않고 바로 페이로드를 보낼 수 있기도 하다.
펌웨어 같은 경우는 최근 임베디드 시스템에서도 취약점 제보로 많이 올라오고 있다고 한다. 물론, 펌웨어 분석이 반드시 필요한 것은 아니지만 임베디드 같은 경우 펌웨어 확보가 필수적이다. 펌웨어를 확보하기 위해서는 플래시 메모리를 덤프하던지, UART를 이용하거나 혹은 JTAG를 이용할 수 있지만 최근 들어서는 확보도 만만치 않다. 소프트웨어 해킹이 어려워지고 있듯이 하드웨어도 점점 어려워지기 때문이다.
하드웨어 해킹에서 가장 어려웠던 부분은 일반적인 방식의 펌웨어 덤프 방법이 먹히지 않은 칩셋들이 존재하거나 혹은 Code protection이 걸려있을 때이다. Code protection이란, 하드웨어적으로 펌웨어를 보호할 수 있는 기능으로 읽을 수도 없고 오직 지우기와 수정만 가능하다. Code protection이 걸린 칩들은 그럼 어떻게 분석하느냐. 방법으로는 세 가지가 존재한다. 첫 번째로 FIB(Focused ion beam) 장비를 이용하여 회로 조작이 가능하다. 이 기법은 거의 나노급으로 조작할 수 있다고 한다. 프로그래밍 적으로 생각해보면, 가령 특정 비밀번호를 물어보는 부분이 있을 때 리버싱을 통해 우회하거나 조작을 할 수 있는 것처럼 할 수 있단 이야기다. FIB는 본래 해킹을 위해 나온 장비는 아니고 칩에 간단한 테스트를 할 수 있게 한 장비다.
두 번째 방법은 SEM라고 해서 전자현미경이다. 펌웨어는 플래시 메모리에 존재하는데, 이 플래시 메모리 자체를 덤프할 수도 있다. 정확히 덤프라기보다는 플래시 메모리의 사진을 찍어 하얀 부분은 1이고 검은 부분은 0을 가리킨다고 봤을 때 사진을 여러 장 찍어서 하나의 큰 장으로 보는 것이다. 이런 과정을 거치기 전에는 칩 위에 있는 먼지를 다 제거해야 하며, 장비의 성능도 좋을수록 장비도 비싸다.
마지막으로 글리칭 기법이다. 먼저, CPU마다 조금씩은 다르겠지만 명령을 쳤을 때 플래시에서 읽고 디코딩을 하는 등의 과정을 거친다. 일반적으로 이런 사이클을 거쳐서 파이프라인을 읽어서 실행한다. 하지만 이런 정해진 사이클을 조작, 글리칭 기법을 통해 Code protection 기능을 못 읽어오도록 할 수 있다. 정해진 방법은 없지만 파워를 크게 주거나 혹은 적게 주어 사이클의 빠르기를 조작할 수 있다.
FBI를 하기 위해서는 SEM 장비를 사용하여 회로를 분석해야 한다. SEM 장비는 정말 비싸므로 개인이 구매하기는 어렵다. 이때문에 이렇게 사진을 찍어 파는 것을 사업으로 하는 기업도 있다. 이런 것을 실리콘 리버스 엔지니어링이라고 한다.
하드웨어적으로 손상을 주는지 아닌지에 따라 invasive와 Non-invasive 공격으로 구분할 수 있다. Non-invasive는 고가의 장비가 필요한 것은 아니지만, 핀 하나로 정말 많은 결과를 만들어 내기 때문에 정확한 정보를 알기 힘들다. Invasive는 필요한 장비가 상당히 고가이기 때문에 개인이나 회사에서 보유하기에는 어렵다. 대신, 대학원이나 이런 곳에서는 시간당 10만 원씩 하여 사용하기도 한다. 또한, 앞서 얘기했듯이 SEM 할 때에는 먼지를 제거해야 하는데 이때 사용되는 화학 물질은 냄새만 맡아도 문제가 되고 손에 떨어지면 뼈가 녹기도 하니 할 때에는 안전에 주의가 필요하다.
TCU, AVN를 해킹하는 것만으로 자동차를 완벽하게 제어하는 것은 어렵다. 완전하게 자동차를 해킹하기 위해서 CAN bus를 통신하는 모듈을 거쳐야 한다. 앞서 얘기한 TCU나 AVN도 CANbus와 통신한다. 이 때문에 보통 TCU, AVN을 해킹하였으면 이어서 CANbus로 넘어가게 된다. 예를 들어, AVN에는 2개의 MCU가 존재하는데 하나는 차량에서 네비게이션이나 오디오를 조작하는데 사용되고 나머지 하나는 CANbus와 통신하여 내부 모듈과 연결하여 사용된다. 그래서, CANbus 메시지를 보냈을 때 이를 스니핑하여 차량이 어떻게 반응을 하는지 이런 것부터 연구했다. 하지만 이도 쉽지 않았던 것이 가령, 브레이크를 밟았을 때 오가는 메시지만 뽑아내려 하여도 1초에도 몇백 개가 오가기 때문에 원하는 메시지를 뽑기에 번거로움이 있다. CANbus 해킹은 메시지를 해석하는 것이 대부분인데 보통 각각의 차량 파트들을 인터넷에서 팔고 있어 자동차를 사는 것보다는 쉽게 테스트나 해킹을 해볼 수 있다.
자동차 보안은 찰리 밀러나 크리스 발라섹의 연구로 대중적으로 잘 알려지게 되었고 자동차 보안에 관심도도 상당히 높아졌다. 따라서 최근에는 SDLC 단계에서 보안인력을 도입하려는 추세다. SDLC를 도입한다는 것은 개발 초기 단계에서 보안팀이 합류하는 것인데, 사실 이는 금전적으로 더 많이 들기도 하고 프로젝트 기한도 길어져서 어려운 점이 많다. 그래서 일반적으로 개발을 끝내고 컨설팅을 맡기는데 사실 이는 좀 아쉬운 감이 있다. 특히나, 임베디드 같은 경우에는 더욱 안 좋아하는 경향이 있는데 그렇다 하더라도 개발 단계에서 보안팀이 합류하는 것이 좋다. 만약 그렇지 않다면 예를 들어, 보안 업데이트를 하기 상당히 어렵기도 하고, 만들어진 차량의 문제를 고치기도 어렵다. 특히나 이럴 때 하나만 고쳐서 문제가 해결되는 것도 아니다. 더불어, 업데이트할 때에도 over the air 기능 자체에 문제가 있을 수 있고, 만약 이러한 기능이 없다 하더라도 차량 정비소를 가서 업데이트해야 한다. 하지만 스마트폰 업데이트도 잘 안 하는데 차량 정비소에 갈지도 의문이다. 그렇다 하더라도 자동차 보안 문제는 쉽게 볼 수 없다. 이 때문에 리콜한 사례도 있다. 물론 막대한 비용이 발생하긴 했지만 인명 피해로 직결되기 때문에 고쳐져야 하는 분명 문제다.
이어서 발표자는 실제로 자신이 경험했던 자동차 해킹 프로젝트를 하면서 느꼈던 점에 대해 정리를 하고 자동차 보안의 중요성에 대해 이야기해 보는 시간을 가졌다. 그리고 앞으로 전문 보안가들이 관심을 가지고 보아야 할 부분이라며 발표를 끝냈다.
Usable Security - 김형식
Security System이 정말 보안 적으로 하려면 Usable 해야 한다. 한 가지 예시를 들어보겠다. 애플에서 Touch ID 인증 방식을 사용하고 있는데 사람들이 그 기능에 많은 호응을 한다. 왜 그럴까. 바로 편해서이기 때문이다. 사실 애플의 Touch ID 인증은 보안상으로 그 사람만 인증할 수 있기 때문에 보안적인 면에서도 분명 강력한 보안인증이다. 하지만 사람들은 그런 강력한 보안인증에 호응하는 것이 아니라 편하다는 이유로 반응을 보이는 것이다. 반대로, Touch ID를 사용하지 않는 이유도 Usable 때문이라는 것이다. 이러한 점은 Security System이 Usable 해야 하는 이유가 된다. 즉, 시장에서 반응하는 것은 높은 보안 기능이 아니라 Usable이라는 것이다. 실제로 상품 시장에서도 Usable은 성능 테스트를 할 때 빠질 수 없는 중요한 특징이 된다.
비밀번호를 예시로 들어보자. 사용자들은 자신만의 비밀번호를 사용할 때, 비밀번호는 특수한 문자를 사용하길 원한다. 그래서 막상 사용해 보면 거의 많은 사람이 앞에 세 개 '!@#' 정도만 사용한다는 것이다. 즉, 많은 이가 자신이 사용하던 것만 사용하고 비밀번호 크랙할 수 있을 정도의 수준이라는 것이다. 휴대폰 패턴을 봐도 마찬가지다. 본래 핸드폰의 패턴은 수 많은 경우의 수가 있지만, 실제로 가장 많이 사용되는 것은 한 손으로 심플하게 할 수 있는 패턴이 대부분이다.
어떤 사고가 나면 사용자 부주의를 얘기하는데, 사실 이것도 웃긴 얘기다. 메일을 통해 비밀번호를 바꾸거나 어디엔가 비밀번호를 적어놓든가 이런 일을 빈번히 하고 있다. 그리고 이러한 일을 하지 말라고 하면서 어떻게 하지 말라고 하는지는 잘 안 알려주고 있다는 것이다. 따라서, 사용자를 바꾸려 하지 말고 솔루션을 바꾸기가 더 쉽다고 여겨지는 것 같다. 이 때문에 솔루션에는 실행이 느린 프로그램이 생기기 마련인데, 사용자들은 이것 역시 싫어한다는 것이다.
앞서 얘기한 이야기로 내릴 수 있는 결론은 사용자에게 보안을 강요하지 말고, 사용자가 Security System을 제대로 사용할 수 있도록 Usable System을 만드는 것이다. 우리에게는 Security 분야가 있고, 사람이 어떻게 동작하고 반응하는지 연구하는 분야가 있다. 이 두 분야를 합쳐서 함께 생각하는 것이 usable security이다. Security 와 동시에 usable 하게 만들 것이 핵심이다. 예를 들어, 이전에 사람들 얼굴로 인증하는 시스템이 있었다. 결과를 먼저 말하면 잘 안 되었다. 비밀번호를 외우는 것보다 얼굴을 외우기 더 어렵다는 거지. 또한, 사람들은 예쁜 얼굴을 고른다. 이는 Selection bias가 있었다는 것이다. MS에서도 도전했었다. 세 가지 제스처를 만들어 인증하는 것이다. 하지만 이도 Selection bias가 만들어졌기 때문에 실패했다. 따라서 이 usable security System을 만들 때 어떤 부분을 신경 써야 하는지에 대해 여러 문제가 무엇인지 많은 연구를 한다.
그러면 어떤 디자인을 원칙으로 시스템을 만들면 좋을지 살펴보면, 2가지가 존재한다. 첫 번째는 원래 Security 없던 상태 그대로 동작시키는 것이다. 최대한 사용자한테 보안이 없는 것처럼 만드는 것이다. 즉, 사용자에게 보여주지 않는 형태로 설계하는 것이다. 보통 보안 기능을 사용자한테 많은 선택을 주는 것이 더 나아 보일 수도 있는데 그건 아니라는 얘기다. 애초에 Security가 사용자한테 보이지 않고 설정을 건들지 못하게 하는 것이 낫다. 두 번째 방법은 만약 첫 번째 방법을 할 수 없다면 Security와 privacy를 더 잘 이해하게 하라는 것이다. 사용자에게 어떠한 보안적인 상황을 최대한 알려주라는 것이다. 하지만 이 또한, 사용자에게 많은 선택권을 주라는 이야기는 아니다. 실제로 크롬에서 보안이 되어 있지 않은 사이트에 들어갔을 때 사이트의 출입을 막는다. 그렇다 해도 우리야 어떻게 들어가는 지를 알고 있지만, 일반적인 사용자라면 어떻게 들어갈지 모르는 사람이 대부분이다. 들어갈 수 있는 버튼을 최대한 작게 만들어 사용자가 들어가지 못하도록 한 것이다. 이렇게 최소한의 유저 선택은 사용자로서 간편하니 행복하다. 이것이 최소한의 유저 선택이 필요하고 좋은 이유다.
‘I’m not robot’도 usable security 연구의 한 종류다. 여러 인증을 하는 대신에 체크박스만 검사하여 인증을 하는 것도 있다. 사실 이 질문에 검사한다는 것은 우리의 웹 브라우저에서 여러 가지 정보를 가져가 식별하는 데 사용해도 된다는 질문에 동의를 하는 것이다. 즉, 구글은 이 사람이 정상적인 사람인지 확인하여 애초에 usable security System을 주고 그렇지 않다면 주지 않는 것이다.
여기서 중요한 것은 사람들이 private Task를 이해하게 하는 것이 아니라 지키게 하는 것이다. 애플의 Touch ID가 자연스럽게 할 수 있도록 홈 버튼에 인식시킨 것은 그야말로 놀라웠던 점인 것이다. 그야말로 사용자가 아이폰을 사용하기 위해 그냥 하던 대로만 하면 보안 인증이 될 것이라고 보는 것이다. 실제로 보안 인증, 절차에 대해 사용자는 약 3%만이 permission을 이해한다. 따라서 이런 설명에 대해 좀 더 이해하기 쉽도록 설명하는 것이다. 예를 들어, 정말로 위험한 일로 가게 되면 똑같은 사용자의 선택을 줄이고 사용자가 위험하다고 알리는 것이다.
이를 이해한 개발자가 크롬에 갔을 때, 크롬 버전이 올라갔다. 크롬 버전 36에서는 위험한 사이트에 들어갔을 때 뒤로 돌아가는 사람의 확률이 30.9%였다면 크롬 버전 37에서는 뒤로 돌아가는 사람의 확률이 58.3%로 바뀌었다. 크롬이 한 것은 단순했다. 사용자가 여기에 들어가면 위험해 라고 이해하기 쉽도록 말을 바꿔주었고, 사용자가 이를 무시하고 들어갈 수 있는 버튼을 잘 보이지 않게 하였다. 이런 연구들이 보여주는 것은 결국에 사용자에게 선택권을 많이 안 준다는 것이다.
지금까지 국내에서 usable security에 대해 꼬집어 나온 적이 없다. 따라서 한 가지 예시를 들자면 보통 무언가의 기능을 평가할 때 O나 X로 표현하곤 한다. 비교하는 대상보다 혹은 여러 가지 기능을 많이 가지고 있다 할 때 사용되곤 한다. 발표자가 얘기하고 싶었던 것은 이런 기능들을 내보이지 말라는 것이다. 이런 얘기보다 진짜로 사용자들이 usable 하게 사용할 수 있는 것들을 만들고 연구했으면 하는 바람을 전했다.
Practical guides to Neutralize Machine-Learning Based Anti-Malware System - 김재환, 서준석
자동차를 보면 입력받는 부분이 있고, 처리하는 부분이 있고 제어하는 부분 3파트가 있다. 발표자의 말에 따르면 입력하는 부분과 처리하는 부분을 조작해서 제어하는 부분을 처리하는 부분이 오늘의 발표 내용이라고 말했다. 먼저, 패턴 기반 인증 기술이란 예를 들어 주차장에서 자동차의 번호판을 자동으로 인식하는 데 이러한 기술의 기반이 패턴 기반 Machine Learning이다. 더 나아가 앞으로 인공지능들을 물리칠 수 있는 기술이 되지 않을까 생각한다.
지금 현재 Machine Learning을 많이 사용되는 곳은 있다면 스팸 필터링이나 네트워크 트래픽 분석하기도 하고 침해 사고에서도 Machine Learning 기법을 사용하기 한다. 침해 사고 시에 사용할 때는 최소한 망가진 파일이 어떤 것이고 어떻게 생겼구나 정도는 알 수 있다고 한다. 마지막으로 악성코드 분석도 Machine Learning으로 할 수 있는 분야 중 하나다.
Machine Learning에는 세 가지의 기법이 있는데, 먼저 supervised learining라고 해서 고양이와 강아지를 분류하는 것이 있다. 두 번째로는 unsupervised learning으로 데이터를 주고 컴퓨터가 선택하도록 하는 것이 있다. 마지막으로 Reinforcement learning이라고 해서 마치 사람이 게임을 하는 것처럼 컴퓨터가 자동으로 스테이지를 넘어가게 하는 것이다. 모든 기법은 공통으로 선 긋기를 기본적으로 하고 있는데 과거의 데이터를 기반으로 미래의 선 긋기를 예측하거나 혹은 두 개의 데이터를 선 긋기를 분류하기도 한다.
Machine Learning러닝의 단계에는 수많은 과정이 있겠지만 가장 중요한 것은 Feature라는 것이다. 보통 어떤 솔루션들을 보면 트래픽의 DNA를 분석해서 이를 기반으로 새로운 공격패턴을 찾아낼 수 있다고 하는데 이런 DNA 하나를 Feature라고 할 수 있다. 아니면 악성코드 사용되는 APR 목록들 같은 것도 각각 Feature다. 여기서 학습이란 수많은 데이터를 컴퓨터에 줄 때 학습한다고 한다. 이를 나타내는 것은 확률 기법을 사용할 수도 있고 선의 경우는 점들 간의 거리를 구해서 최적의 선을 구할 수도 있고 서로 다른 데이터의 상관성을 구하는 것 등 다양한 방법으로 나타낼 수 있다.
먼저 기존에 만들어진 모델이 있으면 이 모델을 분석하여 결과물을 나타내고 나온 결과물과 새로운 모델을 통해 새로운 결과물을 나타내는 이런 방법도 있다. 혹은 모델을 설계할 때, 모델을 공격하는 공격자가 있다고 가정하여 모델링을 할 수도 있다. 가장 대표적이고 이제껏 해온 사례들을 살펴보면 보통은 딥러닝 모델을 이용하여 이미지를 컴퓨터가 인식하는 사례가 많다. 그래서 이미지에 사용자 눈에는 보이지 않지만, 일정한 노이즈를 넣어 컴퓨터가 다른 것으로 인식할 수 있는 공격이 있고 아직 Machine Learning러닝을 공격하는 사례에 대해서는 발표한 자료는 없다.
좀 더 예시를 들어보면 스팸 필터링을 할 때 단어 하나를 미리 학습해 놓고 이 단어들이 메일 내용에 얼마나 있는지 보고 스팸으로 분류한다. 만약 이러한 기능을 공격한다면 a를 @로 한다거나 그런 식으로 공격할 수 있다. 하지만 일반적으로 이러한 공격이 당연하지는 않다. 실제 악성코드 탐지 모델, 안에 있는 내용물들을 볼 수 없다.
어떻게 Machine Learning러닝 공격은 크게 두 가지가 있다. 먼저, 온라인 모델은 모델을 다 만들어놓고 돌리는 것이 아니라 모델을 계속해서 업그레이드시키는 구조로 되어 있는데 이 모델을 계속해서 업그레이드하여 부정확한 모델을 만들 수도 있다. 즉, 학습하는 과정에 공격자가 개입하여 잘못된 방향으로 학습하도록 하는 것이다. 예를 들어, 악성코드인데 악성코드로 분류하지 않도록 하는 것이다.
두 번째로는 내가 가진 악성 코드가 악성코드 모델링에서 인지하지 못하도록 하거나 혹은 내가 가진 악성코드를 다 사용하게 할 수 있도록 하는 것이다. 즉, Machine Learning러닝 자체에서 내가 가진 악성코드를 악성코드로 인지하지 못하게 하는 것이다.
우리가 공격하기 위해서 첫 번째로 학습에서 사용되는 샘플과 그 정상적인 샘플들을 확보할 수 있으면 좋다. 두 번째로는 Feature에 관한 것으로 PE 정보만으로 악성코드를 만들 것인지 혹은 API 사용 여부에 따라 할 것인지 이런 부분들을 하나하나 알고 있으면 공격이 더 쉽다. 세 번째로는 아키텍처다. 즉, 악성코드가 돌아가는 구조를 알고 있으면 공격하기가 쉽다는 이야기다. 네 번째로 Score는 내가 제보한 악성코드가 몇 퍼센트의 확률로 악성코드인지를 확인할 수 있다면 공격하기 쉬워진다. 마지막으로 모델의 변수를 알게 되면 더욱 좋을 것이다. 하지만 사실 이런 부분 들은 무엇하나도 알기 어렵다.
사실 이러한 이유로 먼저 비슷한 구조의 모델링을 하는 것이 첫 번째였다. 그래서 일단 모델을 만들고 이후 내가 만든 모델을 우회하는 코드를 구현하여 실행하고 그 결과를 가져와 다시 보내고는 이런 사이클을 돌린다. 이런 식으로 목적을 달성할 때까지 계속 사이클을 돌리는 것이다. 그리고 어떤 결과가 나오는지에 따라 모델링을 조금씩 변경할 수도 있다.
Adversarial Attack은 그 환경에 맞춰진 위장이 필요하다. 이 말은 그 환경에 맞춰진 악성코드를 최대한 많이 확보하는 것이다. 즉, Machine Learning 환경에서 가질 수 있는 최대한 많은 정보를 가지고 있으면 그걸 조금씩 변형해서 만들 수 있다. 좀 더 예를 들면, PE 파일을 봤을 때 PE 헤더의 메타 정보, 코드 패턴, 안에 있는 실제 바이트들을 디스어셈블리 해서 어셈블리로 뽑은 다음에 어떠한 어셈블리가 나왔는지도 뽑을 수 있다.
아무튼, 여기서 발표자가 확보한 부분은 PE 메타 정보와 코드 패턴, 이미지다. 이를 통해 발표자는 클램프라는 사이트를 통해 PE 정보를 뽑아 확인할 수도 있고, 코드 세션에 있는 바이트를 가져와 디스어셈블링하여 고유한 어셈블리 명령어 패턴이 몇 개 있는지에 따라 판단할 수 있다. 또한, 바이트 값을 가지고 딥러닝 모델에 넣으면 악성코드 여부를 확인할 수 있다.
발표자의 공격 시나리오는 먼저 모델을 만들고 정상 파일과 악성 파일을 넣었을 때, 악성 파일이 정상파일처럼 보이도록 하는 것이다. 그렇게 하여 변장한 파일이 몇 퍼센트 확률로 악성코드인지를 알려준다. 이때 악성파일을 계속 변형하여 사이클을 돌리면서 내가 만든 모델을 우회할 수 있을 때까지 돌린다. 또한, 실제 바이러스 토탈에 뿌려 얼마나 걸러지는지 확인하였다. 먼저 발표자는 정상 파일을 악성 파일에 덮어씌우고 악성파일이 정상 파일처럼 보이도록 하였다. 그 결과 악성 파일일 확률이 10%가 되었고, 이러한 방식으로 어느 정도 하니 악성코드라고 인지하지 못했다. 즉, 임계점을 찾은 것이다. 이를 이용하여 악성 파일들을 변조하여 모델링 해본 결과 악성코드 탐지율은 떨어졌고, 바이러스 토탈에는 이전에 탐지하던 개수보다 더 적게 탐지되었다. 아마 이러한 것이 가능했던 이유는 기존에 사용했던 Feature로 영향을 미쳤을 거라 예상했다. 이어서 엔트로피를 변형하여 다시 테스트해본 결과 더 많은 바이러스가 우회한 것을 확인할 수 있었다.
발표자는 한 달이라는 제한된 시간 동안 프로젝트를 진행하다 보니 완전하지는 못했다며 아쉬운 소감을 내비쳤다. 이어서 프로젝트를 진행하는 동안에 느꼈던 점과 앞으로 완전한 자동화를 만들기 위해 더욱 연구해볼 것이라며 발표를 끝냈다.
=> Secuinside 2017 ③