해당 포스팅은 테코톡 바니의 웹 보안을 토대로 만들어졌습니다.
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 대응 방안
라이브러리나 외부 보안 솔루션을 사용하기도 합니다.
'프로그래밍 공부 > 컴퓨터공학 기초' 카테고리의 다른 글
Software Architecture (0) | 2023.01.19 |
---|---|
동기화(Synchronization) Mutex와 Semaphore (0) | 2022.12.28 |
Web Socket이란? (0) | 2022.01.25 |
쿠키(Cookie), 세션(Session), 토큰(Token) (0) | 2022.01.18 |
인증(Authentication)과 인가(Authorization)란 무엇인가? (0) | 2022.01.17 |