보안에 대해 언젠가 한번 정리를 해야지 해야지 미루고 있다가, 아직 이해도는 떨어지지만 더 미루면 안될 것 같아서 생각나는 것들 위주로 정리해보고자 합니다.

1. 실생활에 널리 퍼져있는 악성코드

스마트폰이 활성화되면서, 다양한 악성코드나 피싱/스미싱 기법들이 출현하고 있습니다.

메신저에서 돈을 빌려달라는 친구들, 돌잔치 초대장, 빵집 쿠폰 과 같이 잠시만 방심하면, 우리는 소중한 개인정보를 훔쳐갈 수 있는 악성코드를 스마트폰에 설치하게 되어 있습니다. 비단 이뿐만이 아니죠. 앱마켓에서 '카카오톡' 앱을 설치하려고 했는데 '키키오톡' 앱을 설치한다거나… 한시도 마음놓고 스마트폰을 이용할 수 없습니다.

 


Figure 1 이런 문자 한두개는 모두 받아보신 적 있죠?

 

2.악성코드의 탐지

이런 악성코드를 막기 위해 여러 백신 회사들은 불철주야 악성코드분석에 나섭니다. 악성코드를 탐지하기 위해서 백신 회사들은 '정적분석(Static Code Analysis)'와 '동적분석(Dynamic Code Analysis)' 방법을 사용합니다.

 

정적분석(Static Code Analysis)

정적분석이란 악성코드를 실행시키지 않고, 코드만 보고 악성코드인지 아닌지 탐지하는 방법입니다. 앱내의 코드를 보았더니 의심스러운 부분이 있더라… 이런 걸 찾는 것이지요. 그런데, 난독화 과정(Code Obfuscation)을 거쳐 마켓에 등록된 앱들은 분석이 쉽지 않습니다. 또한 코드의 사이즈가 큰 경우에도 역시 분석하는데 오래 걸리겠지요. 따라서 이런 경우 동적분석을 수행해야 합니다.

 

동적분석(Dynamic Code Analysis)

동적분석은 정적분석과 달리 악성코드를 직접 실행시키고 동작을 살펴봄으로써, 앱내에 악성코드가 포함되어 있는지 아닌지를 판단하는 기법입니다. 악성코드를 실행시켜야 하므로 에뮬레이터 나 가상화된 환경에서 해당 코드를 실행합니다. 하지만 똑똑한 악성코드는 지금 에뮬레이터에서 실행되고 있는지 아닌지 알아차리고 숨어버리는 기능도 가지고 있습니다. 악성코드에게 가짜 세상에서 돌리고 있음을 들키지 않아야 하죠. 

또한 프로그램이 자동으로 일정 시간동안 실행되어야 하므로 각종 이벤트를 적절하게 발생시켜야 합니다. 가령 오늘 앱마켓에 등록된 게임 내에 악성코드가 있는지 동적분석을 하기 위해서는 실제로 게임을 할 수 있도록 적절한 조작이 가해져야 한다는 것이지요.. (ex. 첫번째 보스를 클리어하면 악성코드가 실행된다면, 첫번째 보스까지는 게임을 진행해봐야 알 수 있겠지요.) 따라서 이런걸 사람이 직접할 수 없으므로 자동화시켜 두어야 합니다.

게다가 Time Bomb 방식으로, 특정 시각 이후(ex. 앱 실행 후 48시간 뒤)에 작업을 시작하는 악성코드들도 있습니다. 이런 악성코드까지 잡아내기 위해서는 동적분석에 걸리는 시간 및 자원이 어마어마하게 들겠지요.

Event 분기도 적절히 해야 합니다. 사용자마다 프로그램을 사용하는 패턴이 다릅니다. 각각의 경우를 모두 고려하는 것 역시 많은 시간과 자원을 필요로 합니다.

 

3. Application Layer에서의 탐지 한계성

위에서 말씀드린 악성코드 탐지 기법들은 모두 application layer에 수행됩니다. 즉, 악성코드가 포함된 앱을 검사하는 백신 프로그램도 또다른 하나의 앱이라는 것이지요. 하지만 최근에는 보다 강력한 공격으로 Rootkit을 이용해 OS권한을 탈취해버리기도 합니다. 일단 OS권한을 취득했다는 것은 Hooking도 가능해서 백신에게 아무 이상이 없는 것처럼 가짜 데이터들을 보낼 수 있기 때문이지요. 그래서, 최근에는 가상화를 이용한 보안 방법이 주목받고 있다고 합니다. 가상화에 사용되는 Hypervisor는 각OS들보다 상위 layer에 있기 때문에, 이러한 공격들도 막아낼 수 있지요.

그런데 Hypervisor 역시 software이고, software라는 말은 얼마든지 공격을 당할 수 있다는 뜻이 됩니다. Bluepill, DMA code injection, Subvirt 와 같은 가상화 공격용 코드들이 다시 나오게 되고, 창과 방패의 싸움은 계속 되는 것이지요.

그래서 또 최근에는 아예 hardware를 이용한 악성코드 탐지 기법들이 출현합니다. Host가 잘 있는지 memory를 주기적으로 dump해서 확인하는 거죠. 이 과정은 Bus에서 snoop하는 chip을 만들어 넣음으로써 가능합니다. (software적으로 memory access하려면 memory 확인하다가 시간만 다 보내게 된다는군요.) KAIST 강병훈 교수님 과 서울대 백윤홍 교수님 팀이 협업으로 이러한 방법들을 연구중이시라고 합니다.

 

https://www.facebook.com/lab4all 에 오셔서 '좋아요'버튼을 누르시면 페이스북에서도 블로그 내/외의 글들을 쉽게 보실 수 있습니다.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  1. 찾아보니 저 문자는 피싱은 아니라는군요 :)
    페이스북 주소록에서 사진 올려 보내면 보내지는 메시지인듯 합니다.
    이제는 어떤 문자도 믿지 못하는 나 자신을 돌이켜 보게 되네요.

+ Recent posts