시스템보안 - 실행 방지
본문 바로가기

시스템보안 - 실행 방지

액트 2019. 6. 10.

시스템보안 - 실행 방지, XSS, 힙 스프레이, CSRF, SQL 인젝션

어떤 공격을 방지하기 위한 것인가? 2
[보기]
Data Execution Prevention(DEP), NX(No Execute)
① XSS 공격 
② 힙 스프레이 공격
③ CSRF 공격
④ SQL 인젝션 공격

 

-> 메모리 영역에서 실행하지 못하게 하는 것

 힙 스프레이 공격은 예상되는 위치의 힙 메모리 영역에 취약점 공격에 사용할 명령어들을 주입시켜서 실행되게 하는 것

 


데이터 실행 방지(Data Execution Prevention(DEP)) 

현대의 마이크로소프트 윈도우 운영 체제에 포함된 보안 기능이며, 실행 방지 메모리 영역의 실행 코드에서 응용 프로그램이나 서비스가 실행되지 못하게 막기 위해 고안된 것이다. 이를테면 버퍼 오버플로를 통한 코드를 저장하는 특정한 이용을 막을 수 있다. DEP는 두 가지 모드로 실행된다.

1) CPU를 위한 하드웨어 강화 DEP

  - 메모리 페이지를 실행 불가능 상태로 표시한다.
2) 소프트웨어 강화 DEP

  - CPU가 하드웨어적으로 데이터 실행 방지를 지원하지 못하는 경우 이를 사용한다.

  - 소프트웨어 강화 DEP는 데이터 페이지의 코드 실행을 막지는 못하지만, 다른 형태의 종류 (SEH 덮어쓰기)는 막을 수 있다.

DEP는 윈도우 XP 서비스팩 2에 도입되었으며 윈도우 XP 태블릿 PC 에디션 2005, 윈도우 서버 2003 서비스팩 1, 윈도우 비스타에 포함되어 있다. 나중에 나오는 운영 체제들은 이 기능을 여전히 지원하고 있다.


NX(No Execute) 

NX 비트(NX bit, Never eXecute bit, 실행 방지 비트)는 프로세서 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU의 기술이다. 이 기능은 하버드 아키텍처 프로세서에서 보통 쓰인다. 그러나 NX 비트는 기본적인 폰 노이만 구조 프로세서에서 보안을 목적으로 많이 쓰인다.

NX 특성으로 지정된 모든 메모리 구역은 데이터 저장을 위해서만 사용되며, 프로세서 명령어가 그 곳에 상주하지 않음으로써 실행되지 않도록 만들어 준다. 실행 보호라는 일반 기술은 특정한 종류의 악성 소프트웨어를 컴퓨터에 들어오지 못하게 막는 데 사용된다. 악성 소프트웨어의 경우 자신의 코드를 다른 프로그램의 자료 기억 영역에 심어 놓은 다음 이 구역 안에서 자신의 코드를 실행하게 만들며, 이를 버퍼 오버플로 공격이라고 한다.


XSS 공격

SQL injection과 함께 웹 상에서 가장 기초적인 취약점 공격 방법의 일종으로, 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법을 말한다. 공격에 성공하면 사이트에 접속한 사용자는 삽입된 코드를 실행하게 되며, 보통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등의 민감한 정보를 탈취한다.

크로스 사이트 스크립팅이란 이름 답게, 자바스크립트를 사용하여 공격하는 경우가 많다. 공격 방법이 단순하고 가장 기초적이지만, 많은 웹사이트들이 XSS에 대한 방어 조치를 해두지 않아 공격을 받는 경우가 많다. 여러 사용자가 접근 가능한 게시판 등에 코드를 삽입하는 경우도 많으며, 경우에 따라서는 메일과 같은 매체를 통해서도 전파된다. 심지어는 닉네임에 코드를 심기도 한다.

주로 CSRF를 하기 위해서 사용되기 때문에 종종 CSRF와 혼동되는 경우가 있으나, XSS는 자바스크립트를 실행시키는 것이고, CSRF는 특정한 행동을 시키는 것이므로 다르다.


힙 스프레이
컴퓨터 보안에서 힙 스프레이칠은 취약점 공격(익스플로잇)시에 임의 코드 실행을 용이하게하기 위해 사용되는 기술을 이르는 말으로, 이 기술을 구현하는 소스 코드를 힙 스프레이라고 한다. 일반적으로, 힙 스프레이는 공격의 대상이 되는 프로세스 내에 큰 사이즈의 힙 메모리를 할당하고, 여기에 익스플로잇에 사용할 명령어들을 주입시키는 것을 목표로 한다.

동작 방식
힙 스프레이는 그 자체로 보안 문제를 악용하는 기법이라기 보다는 취약성을 악용하기 쉽게하기 위해 사용되는 도구에 가깝다. 따라서 그 자체만을 사용하여 보안 장치들을 깨는 것은 불가능하고, 취약점 공격을 위해서는 별도의 보안 문제가 반드시 필요하다.

대개 보안 문제를 악용한 공격은 많은 요소들에 의해 영향을 받는데, 가령 실행 시마다 미묘하게 달라지는 메모리 배치나 타이밍 등이 (공격자 관점에서 보았을 때) 많은 양의 불확실성을 야기시킨다. 힙 스프레이칠 기법은 이런 불확실성을 최소화시키고 공격의 성공 확률을 높히는 데 사용된다. 힙 스프레이는 대다수의 컴퓨터 아키텍처에서 i) 힙 메모리를 크게 할당하면 그 시작 주소를 어느 정도 예측할 수 있고, ii) 연달아서 할당된 메모리들은 대략 메모리 주소상에 일렬로 존재한다는 점을 이용하는데, 이는 곧 힙 스프레이가 작동할 때 마다 매번 거의 비슷한 위치에 힙 스프레이칠을 할 수 있다는 것을 의미한다.

공격자는 프로그램의 컨트롤을 탈취하기 위해 먼저 프로세스 내에 큰 힙 메모리를 할당한 후에, 이 영역에 공격을 수행할 임의의 명령어들(인스트럭션)을 주입한다. 하지만 이 명령어들은 실행되지 않는 이상 효력을 발휘하지 않는데, 따라서 공격자는 추가로 프로세스가 사용하는 함수 포인터 중 하나에 스프레이칠을 가하여 포인터가 이 영역을 향하도록 하고, 프로세스가 해당 함수 포인터를 읽어들여 호출한 시점부터 공격자가 주입한 명령어들이 실행될 수 있도록 만든다.

큰 사이즈의 힙 메모리에 주입된 명령어들은 대부분의 컴퓨터 아키텍처에서 항상 얼추 비슷한 위치에 설치되지만, 실제로는 주소 공간 레이아웃 임의화(ASLR) 등의 기법으로 인하여 바이트 단위로 정확히 같은 위치에 설치되지는 않는다. 이러한 설치 위치의 미묘한 차이는 힙 스프레이 기법의 효용성에 좋지 않는 영향을 주는데, 만약 스프레이칠한 함수 포인터가 주입한 명령어들의 중간 부분이나 바깥을 향하게 되면 프로세스가 비적법한 명령어를 읽어들이면서 공격이 수행되기 전에 강제 종료되기 때문이다. 이를 방지하기 위해 공격자는 어느 정도 오차가 있을 것으로 예상되는 양만큼의 메모리 영역에 NOP 명령어들을 설치해두어, 이 영역 어느 부분에서부터 컨트롤이 시작하든 궁극적으로 컨트롤이 공격자가 미리 설치해둔 명령어들로 미끄러져 내려오게 끔 만들어둔다. (NOP 슬라이드)


CSRF 공격

사이트 간 요청 위조(또는 크로스 사이트 요청 위조, 영어: Cross-site request forgery, CSRF, XSRF)는 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다.

유명 경매 사이트인 옥션에서 발생한 개인정보 유출 사건에서 사용된 공격 방식 중 하나다.

사이트 간 스크립팅(XSS)을 이용한 공격이 사용자가 특정 웹사이트를 신용하는 점을 노린 것이라면, 사이트간 요청 위조는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것이다. 일단 사용자가 웹사이트에 로그인한 상태에서 사이트간 요청 위조 공격 코드가 삽입된 페이지를 열면, 공격 대상이 되는 웹사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단하게 되어 공격에 노출된다.


SQL Injection
SQL 삽입(영어: SQL Injection, SQL 인젝션, SQL 주입)은 응용 프로그램 보안 상의 허점을 의도적으로 이용해, 악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법이다.

댓글