개발관련 도서/Http&Network Basic

제11장 웹 공격 기술

prden 2021. 7. 21. 09:36

1. HTTP에는 보안 기능이 없다.

웹사이트 대부분은 인증이나 세션 관리, 암호화 등의 보안 기능이 필요하지만 이들은 HTTP에 존재하지 않는다. SSH 프로토콜에는 프로토콜 레벨에서 인증이나 세션 관리 등의 기능이 준비되어 있지만 HTTP에는 없다. 따라서 웹 애플리케이션에서 인증이나 세션 관리 기능을 개발자가 설계하고 구현해야 한다. 

 

2.  웹 애플리케이션에 대한 공격

1) 서버를 노리는 능동적 공격

 능동적 공격은 공격자가 직접 웹 애플리케이션에 액세스 하는 공격 코드를 보내는 타입의 공격이다. 이 타입의 공격은 서버상의 리소스에 대해 직접 실행된다. 대표적인 예로는 SQL 인젝션과 OS 커맨드 인젝션 등이 있다. 

 

2) 유저를 노리는 수동적 공격

 일반적으로 a. 공격자가 설치한 함정에 유저를 유도하고 함정에는 공격코드를 심어둔 HTTP리퀘스트를 발생시키기 위한 장치가 준비되어 있다. b. 사용자가 함정에 걸리면 유저의 브라우저나 메일 클라이언트에서 함정을 열게 된다. c. 함정에 걸리면 유저의 브라우저가 장착된 공격 코드를 포함한 HTTP 리퀘스트를 공격 대상인 웹 애플리케이션에 송신하고 공격 코드를 실행한다. d. 공격 코드를 실행하는 취약성이 있는 웹 애플리케이션 경유한 결과로써 유저가 가지고 있는 쿠키 등의 기밀 정보를 도둑 맞거나 로그인 중의 유저의 권한이 악용되는 사례가 발생한다. 대표적인 예로는 XSS, cross-site scripting과 크로스 사이트 리퀘스트 포저리(CSRF) 등이 있다. 

 

3.  출력 값의 이스케이프 미비로 인한 취약성

 1) 클라이언트에서 체크 : 클라이언트 측에서의 체크는 대부분 JavaScript를 사용한다. 그러나 변조되었거나 무효화될 가능성이 있기 때문에 근본적인 보안 대책으로는 적합하지 않다.(입력 실수를 지적해주는 정도 즉 UI를 향상하기 위한 정도를 사용한다.)

 

2) 웹 애플리케이션(서버 측)에서 체크

 

4. 공격유형

 1) 크로스 사이트 스크립팅

  크로스 사이트 스크립팅은 취약성 있는 웹사이트를 방문한 사용자의 브라우저에서 부정한 HTML 태그나 JavaScript 등을 동작시키는 공격이다. 동적으로 HTML을 생성하는 부분에서 취약성이 발생할 수 있다. 

 -가짜 입력 폼 등에 의해 유저의 개인 정보를 도둑맞는다. 

 -스크립트에 의해 유저의 쿠키 값이 도둑 맞거나 피해자가 의도하지 않는 리퀘스트가 송신된다. 

 - 가짜 문장이나 이미지 등이 표시된다. 

 

2) SQL 인젝션

웹 애플리케이션에서 이용하고 있는 데이터베이스에 SQL을 부정하게 실행하는 공격이다. 개인정보나 기밀 정보 누설로 직결되기도 함.

SQL 인젝션에 의해 다음과 같은 영향을 받을 수 있다. 

 - 데이터베이스 내의 데이터 부정 열람이나 변조, 인증 회피, 데이터베이스 서버를 경유한 프로그램 실행 등

ex) 검색창에서 키워드 입력 후 -- 넣으면 뒤에 조건 무시될 수 있다(--는 데이터 베이스에서 주석처리이므로)

 

3) OS커맨드 인젝션

OS커맨드 인젝션이란 웹 애플리케이션을 경유하여 OS 명령을 부정하게 실행하는 공격이다. 쉘을 호출하는 함수가 있는 곳에서 발생할 가능성이 있다.