XSS(Cross Site Scripting Vulnerability) 취약점
공격자가 클라이언트 스크립트를 악용하여 웹사이트에 접속하려는 일반 사용자로 하여금 공격자가 의도한 명령이나 작업을 수행하는 공격으로, 세션탈취, 웹사이트 위변조, 악성 스크 립트 삽입 및 실행, 접근경로 리다이렉트 등의 다양한 공격을 유발할 수 있는 취약점
=> 실제로 스크립트 구문을 입력했을 때 text가 아닌 script로서 실행이 될 때
악성 스크립트가 삽입된 게시글을 올려놓고 그것을 사용자가 접근, 읽었을 때
악성 스크립트가 실행되어 사용자의 쿠키 값 같은 정보값들이 전달되어서 공격자가 탈취하는 방식
EX)
게시판에 script 코드의 삽입이 가능하게 되어있고 URL에 script를 삽입 시에 동작한다.
대응방안 => script 구문이 정상적으로 실행되지 않도록 한다. (입력값 검증)
-웹서버는 사용자가 입력할 수 있는 폼을 대상으로 특수문자가 치환 혹은 필터링 되도록 규칙을 적용하고 코드가 아닌 텍스트로 입력할 수 있도록 문자를 검증해야함.
- 웹 방화벽 이용
-xss cheat sheet 에 대한 필터목록을 만들고 대응
-HTML 을 사용해야 할 시 보안 라이브러리 사용한다.
OWASP ESAPI (JAVA, PHP, ASP.NET 등) 등의 보안라이브러리의 메소드를 호출하여 사용한다.
-HTML Entity encoding 을 사용한다.
웹상에서 출력될 때는 '<' 을 '<'로 출력
웹브라우저에서는 특정 기능을 하는 메타문자로 인식하지 않는다.
문자 | 엔티티 |
< | < |
< | < |
> | > |
& | & |
" | " |
'''
stored (공격자가 올려놓은 스크립트를 통해 정보가 넘어가기 때문에 공격자가 누구인지 추적가능)
게시글에 악의적인 스크립트를 저장해놓고 사용자가 보았을 때 실행되어져서 사용자의 정보 탈취
reflected (공격자가 누구인지 추정할 수 없고 사용자가 공격을 한 것처럼 반사형으로 일어남)
url,url 파라미터, cookie 파라미터 등 사용자가 입력한 내용에 대해서 응답 페이지에 실행되어짐.
dom - 문서 입력 시 텍스트가 아닌 체크박스 같은 플랫폼 (Document object) 를 응용해서 크로스사이트스크립트
'''
SQL Injection (구문삽입) 취약점
DB와 연동된 웹 어플리케이션에서 입력 폼 및 URL입력란에 SQL 문을 삽입(Query 를 실행)하는 형태의 공격으로 시스템 내부정보를 열람 또는 조작할 수 있는 취약점
=> 데이터베이스 입력 구문에 따라 참인 값을 입력했을 때 불필요한 정보가 노출
정상적으로 참이 되는 sql 구문 입력을 통해서 DB서버에서 동작하여 열람 또는 조작하게 됨
EX)
URL에 거짓 코드(Query)를 삽입하면 값이 변경되거나 DB 이름을 알아낼 수 있음.
대응방안
- Prepared Statement 사용하여 사용자가 입력한 값이 문자 데이터로 처리되게 한다.
예시)
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
// SQL 구문이 해석되어 컴파일된다 :username은 placeholder 로 나중에 사용자입력값으로 바인딩한다.
$stmt->execute(['username' => $username]);
// :username에 사용자가 입력한 $username 값이 바인딩된다. $username은 문자데이터로 처리된다.
$user = $stmt->fetch();
//쿼리 결과에서 한 행을 반환한다.
-사용자가 입력하는 폼을 대상으로 화이트리스트 방식으로 특수문자를 사용할 수 있게 한다.
-웹서버의 오류 정보가 사용자에게 노출되지 않도록 조치하며 특수문자를 치환하도록 한다.
'''
prepared statement는 이미 컴퓨터가 알아들을 수 있도록 전환하는 컴파일단계가 진행된 상태에서 placeholder 부분에 사용자 입력값이 들어가는데 이 상태에서 sql 구문을 사용자가 넣어도 컴퓨터는 인식하지 못하게 된다.
blind sql injection 은 특정 구문을 입력해서 y와 n의 값으로 해서 y가 나오는 값들을 하나씩 추정해 나가는 노가다 방식
'''
권한인증 취약점
15-1) 세션 탈취
인증 시 일정한 규칙이 존재하는 세션 ID가 발급되거나 세션 타임아웃을 너무 길게 설정된 경우 공격자에 의해 사용자 권한이 도용될 수 있는 취약점
=> 특정권한을 가지고 있어 그 권한이 일정 시간이 지나면 세션 타임아웃이 안되고 권한 유지가 되어 공격자에게 권한이 도용될 수 있을 때
EX)
로그인 후 로그아웃하지 않고 웹 브라우저 종료 시
재접속하면 세션이 유지되어 로그인상태로 접속
대응방안
- 홈페이지의 세션 ID는 로그인 시 마다 추측할 수 없는 새로운 세션 ID로 발급
- 세션 타음아웃 설정을 통해 일정시간(최대 30분 이상) 동안 움직임이 없을 경우 자동 로그아웃 되도록 구현
15-2) 쿠키 변조
사용자 인증 방식중 하나인 쿠키를 변조하여 다른 사용자로 전환하거나 권한 상승이 가능한 취약점
EX)
사용자 세션(Cookie 등)을 탈취, 인증 시스템을 우회하여 관리자 혹은 타 사용자의 ID가 가진 권한 흭득
대응방안
- 홈페이지는 사용자 인증 등 중요기능 구현 시 가급적이면 Cookie값 대신 Session 방식 사용
- 홈페이지의 사용자 인증 등 중요기능 구현 시 Cookie(또는 Session) 방식 활용 시 안전한 알고리즘 (SEED, 3DES, AES 등)을 사용
에러처리 취약점
웹 서버에 별도의 에러페이지를 설정하지 않은 경우, 에러 메시지를 통해 서버 데이터 정보 등 공격에 필요한 정보가 노출되는 취약점
=> 어느 부분, 경로에서 오류가 났는지 구체적으로 보여지면 공격자 입장에서 경로, 버전정보등 추가적인 공격을 할 수 있는 시도를 할 수 있게 함.
EX)
응용 프로그램의 오류를 유도하여 시스템의 정보와 취약점을 알아낸다.
대응방안
별도의 에러페이지를 제작하여 에러발생 시 에러페이지로 Redirection 시킨다.
에러가 발생했다는 정도만 알 수 있도록만 하면 된다.
'''
서버 : 500번대
사용자 권한 : 400번대
'''
'Security > Web' 카테고리의 다른 글
Brute Force & Command Injection (Low) (0) | 2023.07.14 |
---|---|
프록시와 프록시 툴 (0) | 2023.07.12 |
웹 쉘 (0) | 2023.07.09 |
웹 취약점 -3 (0) | 2023.07.05 |
웹 취약점 -2 (0) | 2023.07.05 |