본문 바로가기

TIL

[인증/보안][SQL Injection][CSRF]

728x90

SQL Injection이란 ?

SQL Injection (SQL 삽입)은 웹 해킹을 접한다면 가장 먼저 배우는 공격 기법인 만큼 간단하지만 아주 강력한 공격이다 이름처럼 데이터베이스에서 임의의 SQL문을 실행할 수 있도록 명령어를 삽입하는 공격 유형이다. 응용프로그램의 보안상의 허점을 이용해 데이터베이스를 비정상적으로 조작하며, 이로 인해 기록이 삭제되거나 데이터가 유출될 수 있다.

1.SQL 삽입 공격은 보통 사용자가 input form에 직접 무언가 작성하는 상황에서 발생한다.
예를 들어 로그인을 한다면 웹사이트에 로그인할 대 입력한 아이디 값과 패스워드 값을 이용해 바로 데이터베이스에 접근한다 만약 클라이언트가 kimkoding이라는 아이디 값을 보낸다면 대략적인 코드는 다음과 같을 것이다

SELECT * 
FROM users
WHERE auth='admin'
AND id='kimcoding';

2. 공격자는 input form에 일반 텍스트(아이디 및 패스워드)가 아닌 SQL문을 작성한다 입력받은 아이디와 패스워드를 통해 데이터베이스를 조회하는데, 패스워드에 'OR '1' = '1'을 넣어 보낸다

SELECT * 
FROM users
WHERE auth='admin'
AND id='' OR '1'='1';

3.WHERE절에서 or는 and보다 연산 순위가 낮기 때문에 or절인 '1'='1' (항상 참)이 가장 나중에 실행되어 결국 로그인에 성공한다. 혹은 아래의 코드처럼 input form에 SQL문을 마무리하는 키워드인 ; 와함께 주요 테이블을 삭제하는 SQL(e. '; DROP TABLES users;--')을 작성한다면 데이터가 모두 삭제되는 큰 피해를 입을 수 있다.

SELECT * 
FROM users
WHERE auth='admin'
AND id='';DROP TABLES users;--';

SQL injection 대응방안

  1. 입력(요청) 값 검증
    SQL문은 사람이 사용하는 자연어와 비슷하기 때문에 키워드를 막기엔 한계가 있다. 따라서 블랙리스크가 아닌 화이트리스트 방식으로 해당 키워드가 들어오면 다른 값으로 치환하여 SQL Injection에 대응할 수 있다.
    ※화이트리스트란 기본 정책이 모두 차단인 상황에서 예외적으로 접근이 가능한 대상을 지정하는 방식 또는 그 지정된 대상들을 말함.
  2. Prepared Statement 구문 사용
    Prepared Statement 구문을 사용하면 사용자의 입력이 SQL문으로부터 분리되어 SQL Inejction을 방어할 수 있다 사용자의 입력 값이 전달되기 전에 데이터베이스가 미리 컴파일하여 SQL을 바로 실행하지 않고 대기하며, 사용자의 입력값을 단순 텍스트로 인식한다. 따라서 입력값이 SQL문이 아닌 단순 텍스트로 적용되며 공격에 실패하게 된다.
  3. Error Message 노출 금지
    공격자는 데이터베이스의 Error Message를 통해 테이블이나 칼럼 등 데이터베이스의 정보를 얻을 수 있다. 에러가 발생한 SQL문과 에러 내용이 클라이언트에 노출되지 않도록 별도의 에러 핸들링이 필요하다.

 

CSRF란?

Cross-Site Request Forgery로 주소가 다른 사이트에서 유저가 보내는 요청을 조작한다는 의미이다.

CSRF공격을 하기 위한 조건

  • 쿠키를 사용한 로그인 : 유저가 로그인 햇을 때, 쿠키로 어떤 유저인지 알 수 있어야 함
  • 예측할 수 있는 요청/parameter를 가지고 있어야함 : request에 해커가 모를수있는 정보가 담겨있으면 안됨

CSRF 공격하는 방법

  1. 사용자가 정상 접속 및 로그인된 상태
  2. 해커가 피싱문자를 보내, 링크를 클릭하게 유도
  3. 링크를 클릭하면 사용자의 웹사이트에서 패스워드를 자동으로 변경하게 만듦
  4. 해커는 사용자의 아이디와 변경된 패스워드로 웹사이트에 접속

CSRF공격을 막는 방법

  1. CSRF 토큰 사용하기
    서버측에서 CSRF 공격에 보호하기 위한 문자열을 유저의 브라우저와 웹 앱에만 제공
  2. -Same-site cookie사용하기
    같은 도메인에서만 세션/쿠키를 사용할 수 있다. (피싱에 있는 사이트로 들어간경우 같은 도메인이 아니므로 쿠키가 전송이 되지 않음)
728x90

'TIL' 카테고리의 다른 글

[Spring Security][인증 구성요소 이해]  (0) 2022.11.21
[Spring Security][Web요청 처리 흐름]  (0) 2022.11.20
[인증/보안][Session]  (0) 2022.11.19
[인증/보안][Cookie]  (0) 2022.11.19
[Spring Security][기본구조]  (0) 2022.11.19