임의 코드 실행

임의 코드 실행(arbitrary code execution, ACE)은 컴퓨터 보안에서 목적으로 한 머신 혹은 프로세스에서 공격자가 원하는 임의의 명령을 실행하는 공격자의 능력을 보이는데 사용된다. 임의 코드 실행 취약점은 공격자에게 임의의 코드를 실행하는 방법을 제공하는 소프트웨어 버그를 보이는데 사용된다. 이러한 취약점을 악용할 수 있도록 설계된 프로그램을 임의 코드 실행 익스플로잇 이라고 합니다. 이 취약점의 대부분은 기계어와 셸 코드를 실행하고 공격자가 임의로 입력한 셸 코드를 실행, 삽입하도록 허용한다. 다른 기기에서 임의 코드 실행을 하도록 만드는 것은 원격 코드 실행 이라고한다.( 일반적으로 네트워크, 인터넷 을 사용하여 이루어진다. )

이러한 버그는 공격자가 취약한 프로세스를 완전히 탈취할 수 있기 때문에 매우 안좋은 영향을 미친다. 여기서 공격자는 실행중인 프로세스를 통해 해당 기기를 완전히 제어할 수 있다. 임의 코드 실행 취약점은 일반적으로 소유자의 동의없이 동작하는 악성코드, 혹은 제조사의 동의없이 실행되는 홈 브류 소프트웨어에 의해서 악용된다.

임의 실행코드는 실행중인 프로세스의 프로그램 카운터 ( 인스트럭션 포인터라고도 함 )를 제어하면서 이루어진다.  인스트럭션 포인터는 프로세스에서 다음에 실행되어야 할 명령을 가리킵니다. 그러므로 인스트럭션 포인터를 제어할 수 있다면 다음 명령도 제어할 수 있게 된다. 임의의 코드를 실행하기 위해 많은 익스플로잇들은 프로세스에 코드를 삽입한다. (예를 들면, 사용자의 입력값을 저장하는 입력 버퍼 ) 그리고 취약점을 이용해 인스트럭션 포인터를 삽입한 코드가 존재하는 곳으로 변경한다. 삽입된 코드는 자동적으로 실행될 것이다. 이러한 형태의 공격은 일반적으로 코드영역과 데이터 영역을 구분하지 않는 폰 노이만 구조에 기반한다. 이 결과 악의적인 코드는 정상적인 입력값으로 위장될 수 있다. 많은 새로운 CPU들은 이러한 공격을 더욱 어렵게 만드는 메커니즘을 갖고 있다.(실행 불가 비트와 같은)

침입자가 OS에서 직접적으로 임의 코드를 실행할 수 있다면, 추가적인 제어를 위해 권한 확대 공격 과 같은 시도를 해볼 수 있다. 이것은 커널 혹은 계정 ( Administrator, SYSTEM, root) 을 얻을 수 있음을 의미한다. 제어권을 얻든 얻지 않든지간에, 이 공격은 매우 위험하고 컴퓨터를 좀비 피씨로 만들 가능성을 갖고 있다. 하지만 권한상승은 공격 사실을 관리자로부터 은폐할 수 있다. 권한상승을 할 수 있는 원격 코드 실행은 비슷한 다른 여러 공격들을 만드는데 영향을 미칠 수 있다. 만약 이러한 버그가 알려진다면 몇시간 안에 수정이 이루어져야 한다.

각주 

컴퓨터 보안
취약점 공격