기타
웹 보안 공격
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 인증서를 이용한다