소프트웨어는 해커들의 타겟이 될 수 있다. 사실, 다들 한번씩은 불법 복제 게임을 해본 경험이 있을텐데 이 또한 소프트웨어 크래킹의 좋은 예시이다. 지금부터, 소프트웨어 공격 방식과 대처법을 알아보자
컴퓨터는 유한 상태 기계 (FSM) 이다. 유한한 상태이며, 상태에 따른 입력에 따라서 다른 상태로 넘어가게 된다. 만일 코드에 에러가 존재한다면, 예상과는 다른 상태로 이동할 것이고 그러한 상태의 누적으로 인해 외부적인 Failure가 발생하게 된다.
결함으로 인한 해커들의 소프트웨어 공격 방법을 살펴보자
스택에서 할당된 배열을 벗어나서, 정수를 할당해 주고 있다. 이렇게 될 경우, 전혀 예상하지 못한 정보를 OverWrite하게 될 수 있다.
위와 같이, 특정한 flag를 true로 덮어 쓸 수 있게 된다.
만일 사용자가 입력한 값이, 할당된 buffer의 범위를 벗어나서 ret을 오버라이트 할 수 있다. 여기서 ret이란, 해당 함수가 끝나고 제어권이 돌아갈 메모리 주소이다. 즉, 함수 종류 후 실행할 함수의 주소이다. 만일, ret을 악의적인 함수가 존재하는 메모리로 오버라이트할 경우 함수 실행 종류 후 악의적인 함수가 실행되게 된다.
결론적으로, 메모리 주소를 정확히 모르기 때문에 항상 성공을 보장할 수 없으나 만일 성공할 경우 Code injection이 가능하다. Trial&Error를 통해 많은 노동이 필요한 공격 방법이다.
함수 수행 시, 검증을 제대로 안할 시에 발생할 수 있다. 예를 들어, Web front에서 입력값을 제대로 검사 안하고 Back에서 그 값을 그대로 사용할 경우 위험하다.
위의 예시처럼, 파라미터를 조작할 수 있고 프론트에서 검증을 안할 경우 위험하다.
운영체제에서 보던 단어를 여기서 보니 뭔가 반갑다. Atomic 하지 않은 보안 프로세스에서 발생 가능한 결함이다. 예를 들어, mkdir의 예시를 보자
공간을 할당한 후, 해당 dir에 대한 소유권을 유저에게 부여한다. 만일 위와 같은 과정이 atomic하지 않아서 중간에 공격자가 개입할 경우 아래와 같이 된다.
공격자가 중간 과정에 개입하여 해당 space에 대한 symbolic link를 만들 경우, 유저는 전혀 엉뚱한 디렉토리로 이동하게 될 수도 있다.
보안에 민감한 과정은, 최대한 atomic하게 만들어야 함을 알 수 있다.
지금까지, 프로그래머의 실수로 인해 발생할 수 있는 공격법을 알아봤다면 이제부터는 공격자의 의도로 인해 발생하는 악성 소프트웨어를 알아보자 우선 멀웨어의 종류로는
앞의 네트워크에서 말했듯이, 악성 프로그램에 존재하는 특수한 비트 스트림을 기반으로 탐지한다. 결백한 file인데도 오진단 할 수있는 가능성이 존재한다. 이미 잘 알려져있는 멀웨어 탐지에 유리하다.하지만, 알려지지 않은 virus탐지에는 불리하다.
file에 대한 hash 체크섬을 만든 후 변화를 대조한다. 악성코드에 감염되면, file에 변화가 무조건 일어나므로 '감염된 파일'을 '감염되지 않음' 이라고는 하지 않는다. 하지만, file은 많은 변화가 일어나므로 오알람이 발생할 가능성이 있다.
'정상적이지 않은' 작동을 감지한다. 알려지지 않은 바이러스를 탐지 가능하지만, '정상적이지 않은' 작동을 정의하기 어렵다. 최근, ML과 결합되어서 사용되는 탐지법이다.
암호화 키로 코드를 암호화 하고, 감염시마다 새로운 키를 생성하여 암호화 하는 멀웨어이다. 복호화하는 코드를 기반으로 탐지가 가능하다.
폴리모르픽의 진화형이다. 감염시마다, 자신을 디스어셈블하고 여러 코드를 추가적으로 집어 넣어 전혀 다른 이진파일로 보이게 한다. 스캔 기반 탐지로는, 탐지하기 어렵다.