웹 해킹 공격 (XSS, CSRF, SQL Injection etc)

younghyun·2022년 10월 13일
0

XSS

크로스 사이트 스크립팅(Cross Site Scripting, XSS)은 '공격자' 웹사이트에서 피해자가 친숙하다고 느끼는 웹사이트에 악성 스크립트를 주입하는 행위를 말합니다. 웹사이트 사이를 넘어서 공격한다는 의미에서 크로스 사이트 스크립팅이라는 용어가 생겨났습니다.
(크로스 사이트 스크립트라는 용어는 원래 자바 스크립트만을 지칭하는 데 사용되었습니다. 하지만 현재 XSS는 ActiveX, Flash, HTML 등과 같은 비(非) JS 벡터도 포함되는 용어가 되었습니다.)

해커는 사람들이 친밀하고 안전하다고 생각하는 웹사이트에 악성 스크립트를 주입하고, 악성 스크립트가 포함된 게시글을 열람한 피해자들의 쿠키는 해커에게 전송됩니다. 이를 통해 해커는 피해자의 브라우저에서 스트립트를 실행해 사용자의 세션을 가로채거나, 웹사이트 변조하거나, 악의적인 컨텐츠 삽입하거나, 피싱 공격 등을 시도할 수 있게 됩니다.

크로스 사이트 스크립팅은 스크립트 언어와 취약한 코드를 공격 대상으로 하며, 해킹의 주요 목적은 사용자의 정보를 도용하는 것이며, 로그인 입력란을 감염시켜 로그인 세부 정보와 쿠키를 탈취하는 방식으로 진행됩니다. 악성 소프트웨어는 사용자의 세부 정보를 기록해 해커에게 전송하고, 해커는 해당 정보를 사용해 피해자의 계정을 제어할 수 있게 됩니다.

XSS 공격(XSS Attack)은 10가지 웹 애플리케이션 보안 취약점 목록인 OWASP Top10에 포함되어 있을 정도로 자주 발생하는 공격입니다. 대부분의 경우 사용자가 글을 쓰고 읽을 수 있는 게시판에서 자주 발생하지만, 사용자의 입력 값을 웹페이지에 표시하는 곳에서도 공격이 발생할 수 있습니다.

XSS 공격은 악의적인 사용자가 C&C 서버로 리디렉션하기 위해 리디렉션 스크립트를 주입해 중간 경유지로 활용되기도 하며, 사용자의 쿠키를 탈취해 세션 하이재킹(Session Hijacking) 공격을 수행하는 역할을 하기도 합니다.

또한 대부분의 웹 해킹 공격 기법과는 다르게 클라이언트 즉, 사용자를 대상으로 한 공격입니다.

XSS 공격 방식으로는 쿠키 스니핑(Cookie Sniffing), 스크립트 암호화 및 우회, 악성 스크립트 유포, 키 로거(Key Logger), 마우스 스니퍼(Mouse Sniffer), 거짓 정보 추가 등이 있습니다.

XSS 공격 종류

Reflected XSS


가장 일반적인 유형의 XSS 공격으로 사용자에게 입력 받은 값을 서버에서 되돌려주는 곳에서 발생합니다.

이러한 유형의 XSS 공격은 피해자에게 입력 받은 검색어를 그대로 표시하는 곳이나 피해자가 입력한 값을 오류 메시지와 함께 보여주는 곳에 악성 스크립트를 삽입하며, 스크립트는 서버가 피해자의 입력 값을 포함해 응답을 전송할 때 실행됩니다.

반사형 XSS 공격은 피해자가 직접 스크립트를 실행하도록 유도하기 때문에 1회성 공격이라고 할 수 있습니다. 해커가 주입한 악성 스크립트는 해당 서버를 반사해 오류 메시지나 검색 결과를 통해 피해자의 화면에 표시될 수 있습니다.

악성 스크립트는 링크를 클릭한 사용자의 쿠키 값을 해커에게 전송하도록 설정되어 있습니다. 사용자는 버튼 또는 링크를 클릭함으로써 악성 스크립트를 실행하게 되며, 이 경우 악성 스크립트에 감염된 웹사이트에 입력한 모든 정보가 노출됩니다.

Stored XSS


영구적 XSS 공격은 저장형 XSS 공격이라고도 하며, 응용 프로그램이나 웹사이트의 모든 HTTP 응답을 감염시키는 공격을 의미합니다. 영구적 XSS 공격은 반사형 XSS 공격과 달리 지속적으로 피해를 입히는 공격 유형입니다.

영구적 XSS 공격은 해커는 웹 애플리케이션에서 XSS 취약점을 파악하고, 악성 스크립트를 삽입하는 방식으로 진행됩니다.

삽입된 스크립트는 데이터베이스에 저장이 되고, 악성 스크립트가 존재하는 게시글 등을 열람한 사용자들은 쿠키를 탈취당하거나 다른 사이트로 리디렉션되는 공격을 받게 됩니다.

악성 스크립트가 데이터베이스에 저장되어 지속적으로 공격을 실시하기 때문에 많은 피해가 발생할 수 있다는 것이 영구적 XSS 공격의 특징입니다.

영구적 XSS 공격이 가장 많이 발생하는 곳은 게시판이며, 게시판 외에도 사용자가 입력한 값이 데이터베이스에 저장이 되고 저장된 값이 그대로 프론트엔드에 표시되는 곳에서 공격이 발생할 가능성이 높습니다. 일반적으로 XSS 공격은 사용자의 입력 값을 검증하지 않기 때문에 발생한다고 할 수 있습니다.

영구적 XSS가 위험한 이유는 사용자가 링크를 클릭하도록 유인할 필요가 없다는 것입니다. 해커가 할 일은 피해자가 악성 코드가 삽입된 웹사이트에 접속하기만을 기다리는 것뿐입니다.

DOM XSS


웹페이지를 여는 즉시 생성되는 문서 객체 모델(Document Object Model, DOM)은 사용자가 서버와 상호 작용하지 않고도 페이지의 모든 콘텐츠에 액세스할 수 있도록 돕는 프로그래밍 인터페이스입니다. DOM 기반 XSS 공격은 피해자의 브라우저에 초점을 맞춘 것이 특징인 공격입니다.

악의적인 스크립트가 포함 된 URL을 사용자가 요청하게 되어 브라우저를 해석하는 단계에 발생하는 공격입니다. 악의적인 스크립트로 인해서 클라이언트 측 코드가 원래 의도와는 다르게 실행됩니다. DOM based XSS 공격은 다른 XSS 공격과는 다르게 서버 측에서 탐지가 어렵다는 점입니다. 위의 그림을 보면 해커는 http://www.some.site/page.html URL 과 함께 # 이라는 특수문자를 사용하고 있습니다. 이 특수문자는 # 이후의 값은 서버로 전송되지 않는 기능을 가지고 있습니다.

사용자의 요청에 따라 HTML을 다르게 해석하는 부분에 공격이 가능합니다.

반사형 및 영구적 XSS는 응답 페이지 HTML에서 악성코드가 분명하게 나타나기 때문에 위험 징후를 발견할 수 있지만, DOM 기반 XSS는 웹사이트의 코드를 조사하지 않고는 취약점을 발견할 수 없습니다. 이 때문에 전문 기술 지식을 갖추지 않은 이상 DOM 기반 XSS 공격에 당하기 쉽습니다. 웹사이트를 클릭하기 전 코드를 확인하는 사람은 많지 않기 때문입니다.

XSS 위험성

쿠키 정보 및 세션 ID 획득

공격자는 XSS에 취약한 페이지 및 게시판에 XSS 공격을 수행함으로써 해당 페이지를 이용하는 사용자의 쿠키 정보나 세션 ID를 획득할 수 있습니다.

쿠키는 웹 서버가 브라우저에 보내는 4KB 이하의 작은 텍스트 파일로, 사용자가 웹 사이트를 이용하는 동안 사용자 브라우저에 저장하는 파일입니다.

주로 사용자의 상태를 기록하기 위해 쿠키에 로그인 및 버튼 클릭 등에 대한 정보를 저장합니다.

만약 세션 ID 등을 쿠키에 포함하는 경우, XSS 공격을 통해서 페이지 사용자의 세션 ID를 획득 해 공격자가 불법적으로 정상 사용자인 척 가장할 수 있습니다.

시스템 관리자 권한 획득

XSS 취약점이 있는 웹 서버에 다양한 악성 데이터를 포함시킨 후, 사용자의 브라우저가 악성 데이터를 실행하게 할 수 있습니다.

공격자는 아직 패치되지 않은 취약점에 대한 공격 코드가 실행되도록 해 사용자의 시스템을 통제할 수 있습니다.

만약 회사 등 조직의 개인 PC가 해킹될 경우, 조직 내부로 악성 코드가 이동 해 내부의 중요 정보가 탈취될 수 있습니다.

악성코드 다운로드

XSS 공격은 악성 스크립트 자체로 악성 프로그램을 다운로드 할 수는 없습니다.

하지만, 사용자가 악성 스크립트가 있는 URL을 클릭하도록 유도 해 악성 프로그램을 다운받는 사이트로 리다이렉트(Redirect) 하거나 트로이 목마 프로그램을 다운로드 하도록 유도할 수 있습니다.

거짓 페이지 노출

XSS 공격에 취약한 페이지일 경우, <script> 태그 뿐만 아니라 <img>와 같은 그림을 표시하는 태그를 사용 해 원래 페이지와는 전혀 관련이 없는 페이지를 표시할 수 있습니다.

기타 다른 태그도 사용이 가능할 경우, 원래 페이지의 일부를 변조 해 거짓 페이지를 노출할 수 있어 이를 통해 개인정보 유출 등의 위험이 있습니다.

XSS 방어방법

XSS 공격은 IPS, IDS, 방화벽 등으로도 방지할 수가 없습니다.
때문에 단순히 문자를 필터링 하는 등의 방법만이 존재합니다.

script 문자 필터링

XSS 공격은 입력값에 대한 검증이 제대로 이루어지지 않아 발생하는 취약점입니다.
때문에 사용자의 모든 입력값에 대하여 서버측에서 필터링을 해 주어야 합니다.
PHP의 eregi 함수를 이용하면 XSS 공격에 주로 사용되는 문자들을 필터링 할 수 있습니다.
주로 스크립트를 실행하기 위한 특수문자를 필터링 하며, <, >, ", ' 등의 문자가 있습니다.

htmlentities 사용

PHP 함수 중 htmlentities라는 함수가 있습니다.
htmlentities는 모든 특수문자를 HTML 엔티티(entity)로 변환합니다.

  • HTML 엔티티는 "&약어;" 및 "&#숫자;"의 형태를 표현하는 것을 의미한다. 예를 들어 <는 <로, >는 >로 표현한다.

CSRF

웹 어플리케이션 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격입니다.

CSRF를 통해 해커는 희생자의 권한을 도용하여 중요 기능을 실행하는 것이 가능합니다. 예를들어, 페이스북에 희생자의 계정으로 광고성 글을 올리는 것이 가능해 집니다. (물론 페이스북은 CSRF 공격에 대해 잘 대응을 하였겠지만, 이번 글에서 피해 서비스 = 페이스북으로 설명하겠습니다.)

조금 더 설명하자면, CSRF는 해커가 사용자의 컴퓨터를 감염시키거나 페이스북 서버를 해킹을 해서 이뤄지는 공격은 아닙니다. 그래서 CSRF 공격이 이뤄지려면 다음 조건이 만족되어야 합니다.

  • 위조 요청을 전송하는 서비스(페이스북)에 희생자가 로그인 상태
  • 희생자가 해커가 만든 피싱 사이트에 접속

언뜻 보면 이 두 조건을 다 만족하기가 어려울 것 같지만 생각처럼 드문 일은 아닙니다. 예를들어 페이스북, 네이버, 구글 등의 유명 사이트는 보통 PC에서 자동 로그인을 해놓은 경우가 많고 피싱 사이트는 피싱 메일, 음란 사이트(?) 등을 통해 접속될 수 있습니다.

또한 희생자가 해커가 만든 피싱 사이트를 하지 않더라도 해커가 XSS 공격을 성공한 정상 사이트를 통해 CSRF 공격이 수행될 수 도 있습니다.

CSRF 방어방법

일반적으로 CSRF 공격 방어는 조회성(HTTP GET Method) 데이터에는 방어 대상에 두지 않고, 쓰기/변경이 가능한 POST, PATCH, DELETE Method에만 적용하면 됩니다. 물론 정말 중요한 데이터를 조회하거나 GET을 통해 쓰기/변경 등의 동작을 한다면 GET Method에도 방어를 해야할 수 도 있습니다.

Referrer 검증

Back-end 단에서 request의 referrer를 확인하여 domain (ex. *.facebook.com) 이 일치하는지 검증하는 방법입니다.
일반적으로 referrer 검증만으로 대부분의 CSRF 공격을 방어할 수 있습니다.

하지만 같은 도메인 내의 페이지에 XSS 취약점이 있는 경우 CSRF 공격에 취약해질 수 있습니다.domain 단위 검증에서 좀 더 세밀하게 페이지 단위까지 일치하는지 검증을 하면 도메인 내의 타 페이지에서의 XSS 취약점에 의한 CSRF 공격을 방어할 수 있습니다.

Security Token 사용 (A.K.A CSRF Token)

Referrer 검증이 불가한 환경이라면, Security Token를 활용할 수 있습니다.
우선 사용자의 세션에 임의의 난수 값을 저장하고 사용자의 요청 마다 해당 난수 값을 포함 시켜 전송시킵니다.

이후 Back-end 단에서 요청을 받을 때마다 세션에 저장된 토큰 값과 요청 파라미터에 전달되는 토큰 값이 일치하는 지 검증하는 방법입니다.
이 방법도 결국 같은 도메인 내에 XSS 취약점이 있다면 CSRF 공격에 취약해집니다.

Submit Cookie 검증은 Security Token 검증의 한 종류로 세션을 사용할 수 없는 환경에서 사용할 수 있는 방법입니다. 웹브라우저의 Same Origin 정책으로 인해 자바스크립트에서 타 도메인의 쿠키 값을 확인/수정하지 못한다는 것을 이용한 방어 기법입니다.
스크립트 단에서 요청 시 난수 값을 생성하여 쿠키에 저장하고 동일한 난수 값을 요청 파라미터(혹은 헤더)에도 저장하여 서버로 전송합니다. 서버단에서는 쿠키의 토큰 값와 파라미터의 토큰 값이 일치하는 지만 검사하면 됩니다. 서버에 따로 토큰 값을 저장할 필요가 없어 위에서 살펴본 세션을 이용한 검증보다 개발 공수가 적은 편입니다.
피싱 사이트에서는 도메인이 달라 facebook.com 쿠키에 값을 저장하지 못하므로 (조금 전에 언급한 Same Origin 정책) 가능한 방어 기법입니다.

SQL Injection


악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위 입니다.
인젝션 공격은 OWASP Top10 중 첫 번째에 속해 있으며, 공격이 비교적 쉬운 편이고 공격에 성공할 경우 큰 피해를 입힐 수 있는 공격입니다.

공격 종류 및 방법

Error based SQL Injection


위의 사진에서 보이는 쿼리문은 일반적으로 로그인 시 많이 사용되는 SQL 구문입니다. 해당 구문에서 입력값에 대한 검증이 없음을 확인하고, 악의적인 사용자가 임의의 SQL 구문을 주입하였습니다. 주입된 내용은 ‘ OR 1=1 -- 로 WHERE 절에 있는 싱글쿼터를 닫아주기 위한 싱글쿼터와 OR 1=1 라는 구문을 이용해 WHERE 절을 모두 참으로 만들고, -- 를 넣어줌으로 뒤의 구문을 모두 주석 처리 해주었습니다.

매우 간단한 구문이지만, 결론적으로 Users 테이블에 있는 모든 정보를 조회하게 됨으로 써 가장 먼저 만들어진 계정으로 로그인에 성공하게 됩니다. 보통은 관리자 계정을 맨 처음 만들기 때문에 관리자 계정에 로그인 할 수 있게 됩니다. 관리자 계정을 탈취한 악의적인 사용자는 관리자의 권한을 이용해 또 다른 2차피해를 발생 시킬 수 있게 됩니다.

Union based SQL Injection

Union 명령어를 이용한 SQL Injection.
SQL 에서 Union 키워드는 두 개의 쿼리문에 대한 결과를 통합해서 하나의 테이블로 보여주게 하는 키워드 입니다. 정상적인 쿼리문에 Union 키워드를 사용하여 인젝션에 성공하면, 원하는 쿼리문을 실행할 수 있게 됩니다. Union Injection을 성공하기 위해서는 두 가지의 조건이 있습니다. 하나는 Union 하는 두 테이블의 컬럼 수가 같아야 하고, 데이터 형이 같아야 합니다.

위의 사진에서 보이는 쿼리문은 Board 라는 테이블에서 게시글을 검색하는 쿼리문입니다. 입력값을 title 과 contents 컬럼의 데이터랑 비교한 뒤 비슷한 글자가 있는 게시글을 출력합니다. 여기서 입력값으로 Union 키워드와 함께 컬럼 수를 맞춰서 SELECT 구문을 넣어주게 되면 두 쿼리문이 합쳐서서 하나의 테이블로 보여지게 됩니다. 현재 인젝션 한 구문은 사용자의 id와 passwd를 요청하는 쿼리문 입니다. 인젝션이 성공하게 되면, 사용자의 개인정보가 게시글과 함께 화면에 보여지게 됩니다.

물론 패스워드를 평문으로 데이터베이스에 저장하지는 않겠지만 인젝션이 가능하다는 점에서 이미 그 이상의 보안위험에 노출되어 있습니다. 이 공격도 역시 입력값에 대한 검증이 없기 때문에 발생하게 되었습니다.

Blind SQL Injection

Boolean based SQL
Blind SQL Injection은 데이터베이스로부터 특정한 값이나 데이터를 전달받지 않고, 단순히 참과 거짓의 정보만 알 수 있을 때 사용합니다. 로그인 폼에 SQL Injection이 가능하다고 가정 했을 때, 서버가 응답하는 로그인 성공과 로그인 실패 메시지를 이용하여, DB의 테이블 정보 등을 추출해 낼 수 있습니다.

위의 그림은 Blind Injection을 이용하여 데이터베이스의 테이블 명을 알아내는 방법입니다. (MySQL) 인젝션이 가능한 로그인 폼을 통하여 악의적인 사용자는 임의로 가입한 abc123 이라는 아이디와 함께 abc123’ and ASCII(SUBSTR(SELECT name From information_schema.tables WHERE table_type=’base table’ limit 0,1)1,1)) > 100 -- 이라는 구문을 주입합니다.

해당구문은 MySQL 에서 테이블 명을 조회하는 구문으로 limit 키워드를 통해 하나의 테이블만 조회하고, SUBSTR 함수로 첫 글자만, 그리고 마지막으로 ASCII 를 통해서 ascii 값으로 변환해줍니다. 만약에 조회되는 테이블 명이 Users 라면 ‘U’ 자가 ascii 값으로 조회가 될 것이고, 뒤의 100 이라는 숫자 값과 비교를 하게 됩니다. 거짓이면 로그인 실패가 될 것이고, 참이 될 때까지 뒤의 100이라는 숫자를 변경해 가면서 비교를 하면 됩니다. 공격자는 이 프로세스를 자동화 스크립트를 통하여 단기간 내에 테이블 명을 알아 낼 수 있습니다.

Time based SQL

Time Based SQL Injection 도 마찬가지로 서버로부터 특정한 응답 대신에 참 혹은 거짓의 응답을 통해서 데이터베이스의 정보를 유추하는 기법입니다. 사용되는 함수는 MySQL 기준으로 SLEEP 과 BENCHMARK 입니다.

위의 그림은 Time based SQL Injection을 사용하여 현재 사용하고 있는 데이터베이스의 길이를 알아내는 방법입니다. 로그인 폼에 주입이 되었으며 임의로 abc123 이라는 계정을 생성해 두었습니다. 악의적인 사용자가 abc123’ OR (LENGTH(DATABASE())=1 AND SLEEP(2)) – 이라는 구문을 주입하였습니다. 여기서 LENGTH 함수는 문자열의 길이를 반환하고, DATABASE 함수는 데이터베이스의 이름을 반환합니다.

주입된 구문에서, LENGTH(DATABASE()) = 1 가 참이면 SLEEP(2) 가 동작하고, 거짓이면 동작하지 않습니다. 이를 통해서 숫자 1 부분을 조작하여 데이터베이스의 길이를 알아 낼 수 있습니다. 만약에 SLEEP 이라는 단어가 치환처리 되어있다면, 또 다른 방법으로 BENCHMARK 나 WAIT 함수를 사용 할 수 있습니다. BENCHMARK 는 BENCHMARK(1000000,AES_ENCRYPT('hello','goodbye')); 이런 식으로 사용이 가능합니다. 이 구문을 실행 하면 약 4.74초가 걸립니다.

Stored Procedure SQL Injection(저장된 프로시저 에서의 SQL Injection)

일련의 쿼리들을 모아 하나의 함수처럼 사용하기 위한 것입니다. 공격에 사용되는 대표적인 저장 프로시저는 MS-SQL 에 있는 xp_cmdshell로 윈도우 명령어를 사용할 수 있게 됩니다.
단, 공격자가 시스템 권한을 획득 해야 하므로 공격난이도가 높으나 공격에 성공한다면, 서버에 직접적인 피해를 입힐 수 있는 공격 입니다.

Mass SQL Injection(다량의 SQL Injection 공격)

2008년에 처음 발견된 공격기법으로 기존 SQL Injection 과 달리 한번의 공격으로 다량의 데이터베이스가 조작되어 큰 피해를 입히는 것을 의미합니다. 보통 MS-SQL을 사용하는 ASP 기반 웹 애플리케이션에서 많이 사용되며, 쿼리문은 HEX 인코딩 방식으로 인코딩 하여 공격합니다. 보통 데이터베이스 값을 변조하여 데이터베이스에 악성스크립트를 삽입하고, 사용자들이 변조된 사이트에 접속 시 좀비PC로 감염되게 합니다. 이렇게 감염된 좀비 PC들은 DDoS 공격에 사용됩니다.

SQL Injection 대응 방안

입력 값에 대한 검증

SQL Injection 에서 사용되는 기법과 키워드는 엄청나게 많습니다. 사용자의 입력 값에 대한 검증이 필요한데요. 서버 단에서 화이트리스트 기반으로 검증해야 합니다. 블랙리스트 기반으로 검증하게 되면 수많은 차단리스트를 등록해야 하고, 하나라도 빠지면 공격에 성공하게 되기 때문입니다. 공백으로 치환하는 방법도 많이 쓰이는데, 이 방법도 취약한 방법입니다. 예를 들어 공격자가 SESELECTLECT 라고 입력 시 중간의 SELECT가 공백으로 치환이 되면 SELECT 라는 키워드가 완성되게 됩니다. 공백 대신 공격 키워드와는 의미 없는 단어로 치환되어야 합니다.

Prepared Statement 구문사용

Prepared Statement 구문을 사용하게 되면, 사용자의 입력 값이 데이터베이스의 파라미터로 들어가기 전에 DBMS가 미리 컴파일 하여 실행하지 않고 대기합니다. 그 후 사용자의 입력 값을 문자열로 인식하게 하여 공격 쿼리가 들어간다고 하더라도, 사용자의 입력은 이미 의미 없는 단순 문자열 이기 때문에 전체 쿼리문도 공격자의 의도대로 작동하지 않습니다.

Error Message 노출 금지

공격자가 SQL Injection을 수행하기 위해서는 데이터베이스의 정보(테이블명, 컬럼명 등)가 필요합니다. 데이터베이스 에러 발생 시 따로 처리를 해주지 않았다면, 에러가 발생한 쿼리문과 함께 에러에 관한 내용을 반환해 줍니다.
여기서 테이블명 및 컬럼명 그리고 쿼리문이 노출이 될 수 있기 때문에, 데이터 베이스에 대한 오류발생 시 사용자에게 보여줄 수 있는 페이지를 제작 혹은 메시지박스를 띄우도록 하여야 합니다.

웹 방화벽 사용

웹 공격 방어에 특화되어있는 웹 방화벽을 사용하는 것도 하나의 방법입니다. 웹 방화벽은 소프트웨어 형, 하드웨어 형, 프록시 형 이렇게 세가지 종류로 나눌 수 있는데 소프트웨어 형은 서버 내에 직접 설치하는 방법이고, 하드웨어 형은 네트워크 상에서 서버 앞 단에 직접 하드웨어 장비로 구성하는 것이며 마지막으로 프록시 형은 DNS 서버 주소를 웹 방화벽으로 바꾸고 서버로 가는 트래픽이 웹 방화벽을 먼저 거치도록 하는 방법입니다.

세션 하이재킹(Session Hijacking)

세션(Session)은 사용자와 컴퓨터, 또는 두 대의 컴퓨터 간의 활성화된 상태를 말합니다.
세션 하이재킹은 시스템 간 연결이 활성화된 상태, 즉 로그인(Login) 된 상태를 가로채는 것을 뜻합니다.

세션 하이재킹은 시스템에 접근할 적법한 사용자의 아이디와 패스워드를 모를 경우 공격 대상이 이미 시스템에 접속되어 세션이 연결되어 있는 상태를 가로채기 하는 공격으로 아이디와 패스워드를 몰라도 시스템에 접근하여 자원이나 데이터를 사용할 수 있는 공격을 말합니다.

한마디로 공격자가 인증 작업 등이 완료된 정상적으로 통신하고 있는 다른 사용자의 세션을 가로채서 별도의 인증 작업을 거치지 않고 가로챈 세션으로 통신을 계속하는 행위입니다.

TCP 세션 하이재킹 (TCP Session Hijacking)

TCP 세션 하이재킹은 TCP의 고유한 취약점을 이용하여 정상적인 접속을 빼앗는 방법입니다.
서버와 클라이언트에 각각 잘못된 시퀀스 넘버 (순서 번호)를 사용해서 연결된 세션에 잠시 혼란을 준 뒤 공격자가 끼어 들어가는 방식입니다.
이와 같이 TCP 연결을 가로채는 것을 TCP Connection Hijacking이라고 부릅니다.

스니핑 공격

단어의 사전적 의미로는 ‘코를 킁킁거리다’, ‘냄새를 맡다’ 등의 뜻으로 정의됩니다. 사전적인 의미와 같이 해킹 기법으로서 스니핑은 네트워크 상에서 자신이 아닌 다른 상대방의 패킷(데이터) 교환을 엿듣는 즉 도청하는 것을 의미합니다.
컴퓨터 내에서의 스니핑 공격은 일반적으로 작동하는 IP 필터링과 MAC 주소 필터링을 수행하지 않고, 랜 카드로 들어오는 전기 신호를 모두 읽어 들이기 떄문에 다른 이의 패킷을 관찰하여 정보를 유출시키 수 있는 것입니다.
간단히 말하여 네트워크 트래픽을 도청(eavesdropping)하는 과정을 스니핑이라고 할 수 있습니다. 이런 스니핑을 할 수 있도록 하는 도구를 스니퍼(Sniffer)라고 칭하며 스니퍼를 설치하는 과정은 전화기 도청 장치를 설치하는 과정과 유사하여 비유될 수 있습니다.
또한 스니핑 공격을 수동적 공격이라고 말하는데 공격할 때 아무 것도 하지 않고 조용히 있는 것만으로도 충분하기 때문입니다.

서비스 거부 공격(Denial-Of-Service attack, DoS attack)

DoS Attack는 Denial-Of-Service attack의 약자로 DoS attack 또는 디오에스 공격/도스 공격(DoS attack)이라고 불려집니다.
시스템을 악의적으로 공격해 해당 시스템의 리소스(정보 시스템의 데이터나 자원을 적절한 대기 시간 내에 사용하는 것)를 시스템에 과도한 부하를 일으켜 정보 시스템의 자원을 부족하게 하여 원래 의도된 용도로 사용하지 못하게 하는 공격입니다.

DoS 공격은 크게 소프트웨어의 취약점을 이용한 공격과 flooding 유형의 공격으로 구분할 수 있습니다.

분산 서비스 거부 공격 DDos(Distributed Denial of Service)

공격자가 중간 시스템에 공격을 명령하고 중간 시스템에서 관리하는 각 PC들이 서버에게 로드를 가하는 공격 방법입니다.
공격자는 중간 시스템과 공격자를 악성 코드를 이용해 좀비 PC로 만들고 해당 좀비 PC를 이용하여 공격을 가하는 기법이기에 공격자 입장에서는 정확한 공격자를 찾기 어렵다는 장점이 있다. 악성 프로그램이 퍼져나갈수록 좀비 PC가 증가하고 서버 즉, 공격 대상 또한 피해가 커지게 되는 공격 기법입니다.

분산 서비스 거부 공격 기본 구성

  • 공격자(Attacker)
    공격을 주도하는 해커 컴퓨터
  • 마스터(Master)
    공격자에게 직접 명령을 받는 시스템으로 여러 대의 에이전트를 관리
  • 핸들러(Handler) 프로그램
    마스터 시스템의 역할을 수행하는 프로그램
  • 에이전트(Agent)
    직접 공격을 가하는 시스템
  • 데몬(Daemon) 프로그램
    에이전트 시스템의 역할을 수행하는 프로그램

참고
https://4rgos.tistory.com/1
https://nordvpn.com/ko/blog/xss-attack/
https://lucete1230-cyberpolice.tistory.com/23
https://noirstar.tistory.com/266
https://itstory.tk/entry/CSRF-%EA%B3%B5%EA%B2%A9%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-CSRF-%EB%B0%A9%EC%96%B4-%EB%B0%A9%EB%B2%95
https://junhyunny.github.io/information/security/spring-boot/spring-security/cross-site-reqeust-forgery/
https://noirstar.tistory.com/264
https://peemangit.tistory.com/354
https://onecoin-life.com/22
https://onecoin-life.com/21
https://onecoin-life.com/20

profile
선명한 기억보다 흐릿한 메모

0개의 댓글