기타

웹 보안 공격

zunwon 2023. 12. 16. 15:36

웹 보안

웹 사이트의 취약점을 공격하는 기술적 위협으로, 웹 페이지를 통하여 권한이 없는 시스템에 접근하거나 데이터 유출 및 파괴와 같은 행위를 말한다


다양한 공격 기법

SQL Injection, XSS, CSRF Attack, File Upload Attack, Command Injection, Buffer Overflow, Dictionary Attack 등 등


SQL Injection

  • 서버에서 실행되는 SQL을 악의적으로 이용하는 공격
  • 기존 SQL에 악의적인 SQL을 삽입한다.
  • 데이터 탈취, 삭제 등이 가능하다

방어법

  • SQL에서 특별한 의미를 가지는 문자를 이스케이프한다
    ex) \n, \t, |, /, &, #, ...
  • 준비된 선언을 사용한다
    • Placeholder를 담은 SQL을 먼저 DB에 보낸후 Placeholder에 해당하는 입력 값을 DB에 보내는 방식
  • 요즘은 라이브러리, 프레임워크에서 아주 잘 막아준다.

심화

Error based SQL Injection

  • 일부러 SQL 에러를 발생시켜 원하는 정보를 취득한다
  • 쿼리문 추측, DB명, 테이블명 등을 취득할 수 있다

Blind SQL Injection

  • Query 결과의 참/거짓을 보고 원하는 정보가 존재하는지 알 수 있다
  • DB, Table 명을 알 수 있다
  • SQLMap이라는 자동화된 툴을 이용하기도 한다
    • ex) SELECT * FROM users WHERE user_id = '1' and substring(database(), 1, 2) = 'us'#

Union SQL Injection

  • Union 명령을 이용하여 정보를 취득한다
    • ex) SELECT * FROM users WHERE use_id = '1' or 1=1 UNION SELECT '', id, pwd from users#

XSS

  • Cross-Site Scripting
  • 웹 페이지에 악성 스크립트를 삽입하는 공격
  • 사이트 이용자 정보를 탈취할 수 있다

방어

  • HTML 필터링을 한 후 DB에 저장한다.
  • ex) <, >, script, html, head, meta, ...
  • 만약을 위해 프론트엔드에서도 필터링한다

심화

Stored XSS

  • 위에서 소개한 내용
  • 웹 페이지에 악성 스크립트를 삽입하는 공격
  • 사이트 이용자 정보를 탈취할 수 있다

Reflected XSS

  • 검색어 등을 보여주는 곳에 스크립트를 심는 공격
  • URL을 사용자에게 누르게 만들면 공격 성공

DOM Based XSS

  • DOM에 악의적인 스크립트를 심는 공격
  • 브라우저가 해석하는 단계에서 발생되는 공격

CSRF Attack

  • Cross-Site Request Forgery
  • 공격자가 사용자를 이용하여 웹 사이트에 요청을 보내는 공격

방어

Referrer Check

  • 허용한 도메인만 요청 허락하도록 설정

CSRF Token

  • 모든 요청에 토큰을 발급하여 서버에서 검증

CAPTCHA

  • 사람이 요청한 것이 맞는지 검증

Command Injection

  • 애플리케이션에서 사용되는 시스템 명령에 악의적인 명령어를 삽입하는 공격 (WebShell Attack)
  • 서버 root 권한을 취득할 수 있다

방어

  • 가급적 시스템함수는 사용 X
  • 민감한 문자를 필터링 ex) |, &, ;, >, <

FIle Upload Attack

  • 악성 스크립트 파일을 업로드하는 공격
  • 업로드 후 파일 위치를 찾아 실행시키면 공격 성공

방어

  • 확장자 / 파일 타입 검사
  • 업로드 파일을 난수화하여 저장
  • 특수 문자가 포함된 경우 업로드 금지

JavaScript Injection

  • Client-Side에서 JavaScript를 삽입시키는 공격
  • 크롬 console 등을 통해 조작 가능하다
  • Client-Side에 민감한 데이터를 넣을 경우 탈취 가능

방어

  • Client-Side엔 민감한 정보를 절대 넣지 않는다
  • 데이터 유효성 검사가 필요한 경우 서버와 통신 (중요한 데이터는 Client에서만 검사하면 안된다)

DDoS

  • Distributed Denial of Service
  • 서버에 비정상적으로 많은 트래픽을 보내는 공격
  • 서비스가 마비되고 많은 비용이 소모된다

방어

  • 제일 단순한데 제일 막기 어렵다
  • 확장 가능한 서비스 구조 설꼐
  • IP 필터링
  • Rate limit
  • 솔루션 구매

Dictionary Attack

  • 미리 사전에 등록해놓은 문자열을 암호로 대입하는 공격
  • Brute Force의 일종

방어

  • 의미가 있는 문자열(apple, banana...)은 암호로 등록 못하도록 설정
  • Account Lockout Policy
  • 2-factor 인증

Rainbow Table

  • 이미 해킹을 당했다는 가정하에 사용할 수 있는 방법
  • 해시 함수를 이용한 평문을 모두 저장시켜 놓은 표
  • 계정 탈취 후 암호 원문을 알아내기 위해 사용

방어

  • Salt 사용
  • Key Stretching
  • PBKDF2, Bcrypt 등의 암호화 알고리즘 사용

보안정책

CORS

  • Cross-Origin Resource Sharing
  • 개발자가 지정한 프로토콜, 도메인, 포트가 아니라면 리소스를 가져올 수 없다
  • Response header를 보고 허용 여부를 브라우저가 정한다
  • 브라우저마다 구현이 다를 수 있다

CSP

  • Content-Security-Policy
  • 실행 가능한 리소스에 대한 Whitelist를 정하는 정책
  • 웹 사이트가 허용되지 않은 리소스를 요청하지 못하도록 막는다
  • XSS 방지에 도움이 된다
    • 기본적으로 inline script는 실행을 막는다
  • 메타 태그 혹은 HTTP Header로 설정 가능

HTTPS

  • HTTP 프로토콜의 암호화된 버전
  • 소켓 통신에 암호화된 데이터를 전송한다
  • SSL 인증서를 이용한다