- SQL Injection
- 요청에 악의적인 SQL을 삽입하여 공격하는 기술
- 간단하지만 아주 강력한 공격
- 요즘은 대부분 라이브러리, 프레임워크 수준에서 막아주지만 항상 조심해야함
- Error based SQL Injection
- 일부러 에러를 발생시켜서 DB에 대한 정보를 알아내는 방법
- 에러 메시지가 노출되지 않도록 조심해야함
- Blind SQL Injection
- 쿼리 결과의 참/거짓 정보를 보고 원하는 정보가 존재하는지 추론하는 공격 방법
- 이를 통해 데이터베이스, 테이블, 컬럼 명을 파악할 수 있음
- Union SQL Injection
- union 명령을 이용하여 정보를 얻는 공격 방법
- XSS
- 웹 페이지에 악성 자바스크립트를 삽입하는 공격
- 필터링을 잘 해야함
- Stored XSS
- 보통 XSS라하면 소개되는 공격 방법
- DB에 자바스크립트 코드를 넣고 불러올 때 실행되도록 하는 공격
- 브라우저에서 스크립트 실행을 막고 저장될 때 필터링을 해야함
- Reflected XSS
- 입력을 그대로 브라우저에 노출시키는 공격 방법
- URL Query에 redirectUrl 등이 있을 때 이곳에 자바스크립트를 넣을 수 있음
- 악의적인 링크를 타인에게 배포할 수 있으므로 막아야함
- DOM Based XSS
- DOM에 악의적인 스크립트를 넣는 방법
- img 태그의 src 등에 넣을 수 있음
- CSRF Attack
- 공격자가 서비스 사용자를 이용하여 요청을 보내는 공격
- Referer Check, CSRF Token, CAPTCHA 를 통해 막는 것이 가능
- Command Injection
- 쉘을 실행시키는 로직을 이용한 공격
- 시스템 권한이 탈취되는 것이나 마찬가지기 때문에 매우 치명적
- 쉘 명령을 실행시키는 시스템 함수를 사용하지 않는 것이 제일 좋고 만약 꼭 사용해야한다면 |, &, ;, >, <와 같은 민감한 문자는 필터링할 것
- File Upload Attack
- WebShell이 가능한 코드가 담긴 파일을 업로드하고 해커가 URL을 통해 접근 가능해지면 Command Injection과 같은 효과를 볼 수 있음
- 확장자와 파일 타입을 검사하여 허락된 타입만 저장하는 것이 좋음
- 해커가 파일을 찾을 수 없도록 업로드 파일의 이름과 확장자를 난수화하여 저장할 것
- 특수 문자가 포함된 경우 업로드를 막는 것이 좋음 (Null byte Injection 방지)
- JavaScript Injection
- 브라우저에서 자바스크립트를 삽입시키는 공격
- 만약 Client-Side에 민감한 데이터를 넣어놨다면 해당 공격을 통해 탈취 가능
- 클라이언트엔 민감한 데이터를 절대 Plain하게 넣으면 안됨
- 데이터 유효성 검사가 필요한 경우 서버에서 처리해야함
- DDoS
- 분산된 시스템을 이용하여 서버에 비정상적으로 많은 트래픽을 보내 마비시키는 공격
- 단순한데 제일 막기 힘든 공격
- Dictionary Attack
- 미리 데이터베이스에 등록해놓은 수많은 문자열을 암호로 대입하는 공격
- 간단한 단어는 비밀번호로 등록하지 못하게 막을 것
- Account Lockout Policy를 도입
- OTP 같은 2-factor 인증을 도입
- Rainbow Table
- 평문을 해시 함수로 만든 문자열을 모두 저장시켜 놓은 표
- 주로 계정 데이터 탈취 후 암호 원문을 알아내기 위해 사용함
- Salt 사용
- Key Stretching
- PBKDF2, Bcrypt 등의 암호화 알고리즘 사용