보안과 관련된 웹을 공격하는 기술에 대해서 알아봅니다.
11.1 웹 공격 기술
인터넷에서 벌어지는 공격 대부분은 웹 사이트를 노리는 게 많습니다.
특히 웹 애플리케이션을 대상으로 많은 공격이 발생합니다.
11.1.1 HTTP에는 보안 기능이 없다.
HTTP에는 보안과 관련된 기능이 없습니다. 또한 인증도 개발자가 웹 애플리케이션에서 스스로 설계하고 구현해야 합니다.
11.1.2 리퀘스트는 클라이언트에서 변조 가능
HTTP 리퀘스트의 내용은 모든 클라이언트에서 자유롭게 변경하고 변조할 수 있다. 따라서 의도치 않은 값이 서버로 보내질 수 있음. 서버에서는 이에 대응할 수 있어야 한다. 유효성 검증을 각 레이어별로 해야한다. (다른 레이어에 의존성 없이)
쿼리, 폼, HTTP Header, 쿠키 등으로 공격 코드를 보냅니다.
11.1.3 웹 애플리케이션에 대한 공격 패턴
- 능동적 공격
- 직접 웹 애플리케이션에 액세스해서 공격 코드를 보내는 타입의 공격.
- SQL 인젝션과 OS 커맨드 인젝션 등이 있다.
- 수동적 공격
- 함정을 이용해서 유저에게 공격 코드를 실행시키는 공격.
- 공격자가 설치한 함정에 유저를 유도한다.
- 함정에 걸리면 유저의 브라우저나 메일에서 함정을 엵 된다.
- 함정에 걸리면 공격 코드를 HTTP 리퀘스트에 포함하여 서버에 보낸다.
- 공격 코드를 실행하면 쿠키 등의 기밀 정보를 도둑맞거나 유저의 권한이 악용된다.
- XSS, CSRF 등이 있다.
- 유저가 처한 환경을 이용한 인트라넷 등에 대한 공격
- 내부망의 경우에도 함정을 이용해서 공격할 수 있다.
11.2 출력 값의 이스케이프 미비로 인한 취약성
- 클라이언트에서 체크
- 대부분 JavaScript를 이용하는데 이는 변조될 가능성이 있다.
- 따라서 UI를 위한 체크정도로 사용된다.
- 웹 애플리케이션(서버 측)에서 체크
- 입력값 체크
- 유효성 검증을 주로 한다.
- 이스케이프 처리가 중요하다.
- 출력값 체크
- 입력값 체크
11.2.1 크로스 사이트 스크립팅
XSS는 취약성이 있는 웹 사이트를 방문한 사용자의 브라우저에서 부정한 HTML 태그나 JS등을 동작시키는 공격이다.
XSS 공격의 피해
- 유저의 개인 정보를 도둑 맞는다.
- 쿠키 값이 도둑맞거나 의도치 않은 리퀘스트가 전송된다.
- 가짜 문장이나 이미지등이 표시된다.
XSS 공격 사례
- 공격자가 함정을 준비하는 수동적 공격
- Form을 입력하는 경우
- URL에 script를 넣는다.
- 설치한 스크립트가 동작하게 되어 유저의 ID와 Password가 공격자의 사이트에 전송된다.
- 유저의 쿠키를 뺴앗는 공격
- script에 쿠키를 탈취하여 공격자의 사이트에 전송하는 코드를 작성한다.
- Form을 입력하는 경우
11.2.2 SQL 인젝션
- 부정한 SQL을 실행하는 SQL 인젝션
- 웹 애플리케이션에 SQL을 부정하게 실행하는 공격이다.
SQL 인젝션의 피해
- 데이터 부정 열람이나 변조
- 인증 회피
- 데이터베이스 서버를 경유한 프로그램 실행
SQL이란?
데이터 베이스를 조작하는 언어
SQL 인젝션의 공격 사례
- where 조건에 SQL의 주석인 —를 넣어서 원하는 조건에 맞는 데이터를 가져올 수 있도록 한다.
SQL 인젝션은 SQL 문장의 구문을 파괴하는 공격이다.
11.2.3 OS 커맨드 인젝션
웹 애플리케이션을 경유하여 OS 명령을 부정하게 실행하는 공격이다.
OS 커맨드 인젝션 공격 사례
- 이메일을 보내는 폼
- 메일 주소에 커맨드 명령어를 입력하여 내부적으로 리눅스의 계정 정보가 포함된 파일을 공격자의 메일로 정송하게 한다.
11.2.4 HTTP 헤더 인젝션
공격자라 리스폰스 헤더 필드에 개행 문자 등을 삽입함으로써 임의의 리스폰스 헤더 필드나 바디를 추가하는 공격이다 특히 바디를 추가하는 공격은 HTTP 리스폰스 분할 공격이라고 부른다.
HTTP 헤더 인섹션의 영향
- 임의의 쿠키 세트
- 임의의 URL에 리다이렉트
- 임의의 바디 표시
HTTP 헤더 인젝션의 공격 사례
- Set-Cookie 헤더를 이용해서 세션 ID를 강제적으로 세트한다.
- HTTP 리스폰스 분할 공격
- 가짜 바디를 표시하는 공격이다.
- 가짜 웹사이트를 표시해서 개인 정보를 입력하게 하거나 XSS와 같은 효과를 얻을 수 있다.
11.2.5 메일 헤더 인젝션
웹 애플리케이션의 메일 송신 기능에 공격자가 임의의 To 및 Subject 등의 메일 헤더를 부정하게 추가하는 공격이다.
메일 헤더 인젝션의 공격 사례
- 이메일을 보내는 폼
- %0D%0A등의 개행 문자를 이용해서 메일 주소와 내용을 변조할 수 있다.
11.2.6 디렉토리 접근 공격
비공개 디렉토리의 파일에 대해서 부정하게 디렉토리 패스를 가로질러 액세스하는 공격이다.
상대 경로나 절대 경로를 지정한다.
11.2.7 리모트 파일 인클루션
스크립트의 일부를 다른 파일에서 읽어올 때 공격자가 지정한 외부 서버의 URL을 파일에서 읽게 함으로써 임의의 스크립트를 동작시키는 공격이다.
리모트 파일 인클루션의 공격 사례
- 쿼리에 파일 이름을 지정해서 include를 이용해서 파일을 읽는다.
11.3 웹 서버의 설정이나 설계 미비로 인한 취약성
11.3.1 강제 브라우징
강제 브라우징은 웹 서버의 공개 디렉토리에 있는 파일중에서 공개 의도가 없는 파일이 열람되는 취약성
강제 브라우징의 영향
- 고객 정보 등 중요 정보 누설
- 본래 액세스 권한이 있는 사용자에게만 표시하지 않는 정보 누설
- 어디에서도 링크되지 않는 파일 누설
URL이 외부에 노출되었을 경우 피해를 입을 수 있다.
인증 후에만 표시되어야 하는 파일들은 액세스 권한을 확인해야 한다.
11.3.2 부적절한 에러 메시지 처리
에러 메시지에 너무 정확한 정보를 제공하면 안된다.
특히 DB 에러 로그를 그대로 출력하면 안된다.
11.3.3 오픈 리다이렉트
임의의 URL로 리다이렉트 하는 기능이다.
11.4 세션 관리 미비로 인한 취약성
유저의 인증 상태가 뺴앗겨 버리는 피해가 발생된다.
11.4.1 세션 하이잭
공격자가 유저의 세션 ID를 취득해서 악용하는 것을 말한다.
입수 방법
- 부적절한 생성 방법에 의한 세션 ID 추측
- 도청이나 XSS 등에 의한 세션 ID 도용
- 세션 고정 공격에 의한 세션 ID 강제
- XSS로 쿠키 탈취
11.4.2 세션 픽세이션
유저에게 세션 ID를 강제로 부여한다.
세션 ID를 미리 입수하고 유저가 그 세션 ID를 이용해 인증하도록 기다린다. 이후에 이 세션 ID로 유저 정보에 액세스할 수 있다.
11.4.3 크로스 사이트 리퀘스트 포저리
인증된 유저가 의도하지 않은 개인 정보나 설정 정보 등을 공격자가 설치해 둔 함정에 의해 어떤 상태를 갱신하는 처리를 강제로 실행시키는 공격이다.
- 인증된 유저의 권한으로 설정 정보 등을 갱신
- 인증된 유저의 권한으로 상품을 구입
- 인증된 유저의 권한으로 게시판에 글 작성
유저가 의도치않게 본인의 세션 ID로 임의의 글이나 코멘트를 추가하게 된다.
11.5 기타
11.5.1 패스워드 크래킹
패스워드를 논리적으로 이끌어내서 인증을 돌파하는 공격
- 네트워크 경유로 패스워드 시행
- 무차별 대입 공격
- 사전 공격
- 암호화된 패스워드를 해독
- 무차별 대입 공격/사전 공격에 의한 유추
- 레인보우 테이블
- 열쇠 입수
- 암호 알고리즘의 취약성
11.5.2 클릭 재킹
투명한 버튼이나 링크를 함정으로 사용할 웹 페이지에 심어 두고 유저가 링크를 클릭하게 함으로써 의도치 않은 콘텐츠에 액세스 시키는 공격이다.
11.5.3 DoS 공격
서비스 제공을 정지 상태로 만드는 공격이다.
- 액세스를 집중시킴으로써 부하를 걸어 리소스를 다 소비하기 해 서비스를 정지 상태로 만든다.
- 정상적인 액세스와 구별이 힘들다.
- 여러 대의 컴퓨터에서 실행하는 DoS 공격은 DDoS 공격이라고 불린다.
- 취약성을 공격한다.
11.5.4 백도어
제한된 기능을 정규 절차를 밟지 않고 이용하는 것을 말한다.
- 개발 단계에 디버그용으로 추가한 백도어
- 개발자가 본인의 이익을 위해 추가한 백도어
- 공격자가 어떠한 방법을 써서 설치한 백도어
'TIL > 개발' 카테고리의 다른 글
유데미(Udemy) 프로젝트로 배우는 React.js & Next.js 마스터리 클래스 수강 후기 (1) | 2024.02.18 |
---|---|
투두앱을 Cypress로 접근하기 (1) | 2024.02.04 |
누군가 나를 멘토라고 부르기 시작했다 (1) | 2024.01.07 |
그림으로 배우는 Http & Network Basic - 10장 (1) | 2024.01.06 |
그림으로 배우는 Http & Network Basic - 9장 (1) | 2024.01.06 |