프로그래밍 공부/컴퓨터공학 기초

웹 보안(SQL Injection, XSS)

Wonuk 2022. 12. 27. 10:12
반응형
해당 포스팅은 테코톡 바니의 웹 보안을 토대로 만들어졌습니다.
https://www.youtube.com/watch?v=laQAQeuuJF4&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=6

 


OWASP(Open Web Application Security Project)

  • 비영리 보안 프로젝트 재단

웹 어플리케이션에 발생할 수 있는 취약점을 분석하고 연구해

공격 가능성과 기술적 영향을 기준으로 10개의 취약점 OWASP Top 10을 공개합니다.

보통 3~4년 주기로 발표가 됩니다.

 

10가지 항목중 A03: Injection만 알아보도록 하겠습니다.

 

Injection이란?
신뢰할 수 없는 데이터가 명령어나 쿼리문의 일부분으로 전달될 때 발생.
공격자의 악의적인 데이터로 인해 예기치 않은 명령이 실행되거나 올바른 권한 없이 데이터에 접근할 수 있습니다.

2017년도에는 1위를 차지하였고 21년도에도 3위 여전히 상위 자리를 차지하고 있습니다.

 

 

실습환경 - bWAPP - Bee Box

 

 

 

1. SQL Injection

  • SQL 삽입, SQL 주입이라고도 하며 코드 인젝션의 기법 중 하나입니다.
  • 클라이언트의 입력값 조작을 통해 서버의 DataBase를 공격하는 방식입니다.



예제) 쿼리문 # 주석때문에 뒷부분이 생략되어

select * from member where id = 'bunny' or 1=1 # 항상 True로 로그인에 성공하게 됩니다.

 

SQL Injection 종류

 

1. Error Based SQL Injection

  • DataBase에 고의적으로 오류를 발생시켜 에러 출력을 통해 DB구조를 파악하고 필요한 정보를 습득합니다.

실습

간단한 쿼리 에러 Response만으로 MySQL을 사용한다는것을 알 수 있습니다.

 

2. Union Based SQL Injection

- 전제조건 : 컬럼의 개수와 데이터 형식이 같아야 한다.

  • DataBase의 UNION 연산자를 사용하여 쿼리 결과값의 조합을 통해 정보를 파악합니다.

 

실습

간단한 쿼리만으로 컬럼의 개수를 알 수 있습니다.

 

이에 추가적으로

버전과 어떠한 테이블이 존재하는지 알 수 있고 해당 테이블의 정보까지 조회할 수 있습니다.

이러한 과정을통해 계정정보가 유출되기도 합니다.

 

 

대응 방안

1. 에러 메세지 노출 차단 - 공격자에게 정보를 제공하지 않게됩니다.

2. 입력값 검증 - 공격에 사용되는 문자들을 사전에 차단할 수 있습니다.

 

3. Prepared Statements

Statement VS Prepared Statement

Statement는 sql쿼리문에 사용하는 데이터를 넣어서 쿼리문을 만들고

그 쿼리문을 통해 DB를 조회하는 방식을 사용합니다.

 

반면, Prepared Statement는

sql문을 먼저 DB에 준비한 뒤에 파라미터를 바인딩하는 방식을 사용합니다.

 

 

그럼 왜 우리가 작성한 코드에서는 발생하지 않았을까?

1. JdbcTemplate - Prepared Statements를 사용하는 방식으로 동작

 

2. JPA - 파라미터 바인딩 방식으로 동작

 


XSS - Cross Site Scription

악성 스크립트를 웹사이트에 주입하는 코드 인젝션의 기법 중 하나

공격자가 웹 어플리케이션에 보낸 악성 코드가 다른 사용자에게 전달될 때 발생한다.

 

XSS의 종류

1. Stored XSS

공격자가 취약점이 있는 Web Application에 악성 스크립트를

영구적으로 저장하여 다른 사용자에게 전달하는 방식

- 위의 사진 예제와 동일

블로그 글에 악성 스크립트를 삽입하면 해당 스크립트가 조회하는 사용자에게 실행된다.

 

 

2. Reflected XSS

공격자가 사용자에게 악성 스크립트를 메일이나 웹 사이트를 통해 전달하고

사용자가 실행하도록 하는 공격 기법

 

 

 

악성 파일을 다운로드 받는 사이트였다면?

Session이나 Cookie 값을 전달하는 사이트라면??

 

 

XSS 대응 방안

라이브러리나 외부 보안 솔루션을 사용하기도 합니다.

반응형