Security/Web

웹 취약점 -4

NOG 2023. 7. 12. 14:03

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 을 사용한다.

웹상에서 출력될 때는 '&lt;' 을 '<'로 출력

웹브라우저에서는 특정 기능을 하는 메타문자로 인식하지 않는다.

 

문자 엔티티
< &lt;
< &lt;
> &gt;
& &amp;
" &quot;

 

 

 

'''

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