웹 취약점의 종류에 대하여 계속해서 알아보도록 하겠습니다.
과제 발표에 사용한 PPT 파일을 첨부합니다. 만약 지금 제가 거치고 있는 AI 스쿨 교육과정이 더 궁금하시다면 다음 링크를 통해 자세한 정보를 확인해 주세요.
https://cafe.naver.com/itscholar
본문
이번 과제 발표에서 알아볼 웹 취약점은 XSS 취약점, SQL Injection 취약점, 권한인증 취약점, 에러처리 취약점입니다. 해당 취약점 리스트는 행정안전부에서 배포하는 웹 취약점 표준 점검 항목을 참고하여 작성되었습니다.
XSS
XSS는 Cross Site Script의 약자로, 크로스 사이트 스크립트 혹은 사이트간 스크립트라고 통칭합니다. 이는 웹 페이지에서 관리자가 아닌 사람이 스크립트를 삽입할 수 있는 취약점입니다. 공격자가 게시판, 웹 메일 등에 피싱 사이트로 이동하는 스크립트 등을 삽입하기에 피해자는 악성 코드를 다운로드하게 되고 개인정보 탈취등의 피해가 발생할 수 있습니다.
XSS의 유형은 크게 두가지가 존재하는데 후술하도록 하겠습니다.
지속형 XSS
지속형 XSS는 보안이 취약한 사이트를 이용하여 지속적인 XSS 공격을 시도하는 공격 기법입니다. 이는 게시판, 프로필 등을 검증하는 시스템이 미비한 사이트를 대상으로 하는데, 게시판이나 프로필에 악성 스크립트를 삽입하고 이를 본 사용자들이 악성 스크립트를 실행하게 되어 작동하는 방식입니다.
반사형 XSS
반사형 XSS는 URL 스크립트를 이용하여 작동하는 공격 기법입니다. URL 검증 기능이 취약한 웹 사이트를 이용하여 이루어 지는 방식으로, URL에 악의적인 스크립트를 포함시킨 후 유포하여 해당 URL을 통해 접속을 시도하면 내부에 삽입된 스크립트가 실행되어 피해를 입는 방식입니다.
두 XSS 공격을 막는 방법은 유사합니다. 바로 입력값을 검증하고 제한하는 것 입니다. 지속형 XSS는 게시글과 프로필 등 사이트 내부의 입력 값을 검증하고 만약 스크립트로서 작동할 수 있다면 입력값을 제한하거나 다른 문자열로 치환하여 작동하지 않도록 조치하는 것 입니다. 여기에 반사형 XSS는 URL을 검증하여 스크립트가 작동하지 않도록 문자열 제한, 치환등을 할 필요성이 있습니다.
SQL 인젝션
SQL 인젝션은 서버의 취약점을 이용하여 SQL 명령어를 실행하고 이를 통해서 데이터베이스를 열람 및 편집할 수 있는 공격 기법을 말합니다. SQL 인젝션 취약점이 존재한다면 공격자에 의하여 대규모 정보 유출이 일어날 가능성이 높습니다.
SQL 인젝션 공격 기법은 다음 두가지 방안으로 막을 수 있습니다
- 사용자에게서 받은 값을 직접 SQL로 연동해선 안된다
└ Prepared Statement와 같은 기능을 이용하여 사용자의 입력이 SQL에 직접 입력되는 것을 막는다.
- SQL에서 악용될 수 있는 문자열을 제한한다.
└ Escape 함수 등을 사용하여 SQL에서 특수한 의미가 있는 문자열들이 입력되는 것을 막는다.
권한 인증
권한 인증 취약점이란, 사용자 인증에 필요한 정보를 위조하여 다른 사용자로 위장하거나 권한 상승등의 작업이 가능한 취약점입니다. 권한 인증 취약점은 크게 두가지 방법으로 이루어집니다.
쿠키 조작형
과거 인터넷 사이트들은 로그인한 여러 사용자들을 구분 하기 위해서 서버에서 쿠키를 생성하여 사용자에게 발급했습니다. 이 쿠키에는 사용자를 식별하기 위한 모든 정보들이 저장되어 있습니다. 서버는 모든 요청마다 쿠키에 있는 인증 정보를 동하여 사용자를 확인하고 요청을 수행했습니다.
하지만 이 쿠키 인증 방식은 클라이언트에서 인증 정보를 관리하기 때문에 조작에 너무 취약합니다. 위의 이미지 예시처럼 사용자의 이름이나 권한을 쿠키에서 변경하는 것으로 다른 사용자로 위장하거나 권한을 상승시키는 것이 매우 수월합니다. 이를 막기 위해서 세션을 기반으로 한 인증 시스템이 등장합니다.
세션 탈취형
세션 인증 방식은 쿠키 인증 방식에서 한발 더 나아간 방식입니다. 이제 모든 인증 정보는 서버에 저장됩니다. 그리고 사용자들은 로그인을 할 경우 인증 정보와 연결된 세션 ID만을 발급받습니다. 서버는 매 요청시마다 해당 세션 ID가 어떤 인증정보와 연결되어 있는지, 그리고 해당 세션 ID가 유효한지 검증하고 요청을 수행합니다.
하지만 이 세션 ID를 취약한 형태로 발급한다면, 이 역시 공격자에 의하여 탈취당할 수 있습니다. 이 경우 공격자는 탈취한세션을 기반으로 다른 사용자 계정을 탈취할 수 있습니다. 다른 사람 행세를 하여 사회적 명예를 떨어트리거나, 비밀번호를 변경하여 지속적으로 해당 계정을 사용할 수도 있습니다.
권한 인증 취약점을 막기 위해서는 다음 방안을 이용할 수 있습니다.
- 쿠키 인증 시스템 대신 세션 인증 시스템 사용
- 세션 관리 강화
└ 세션에 적절한 만료시간 설정하기
└ 세션 ID를 예측할 수 없는 방식으로 발급
- 중요한 정보에 접근하는 페이지는 2차 인증을 적용하여 추가적인 피해 억제
에러처리 취약점
오류가 발생 할 경우 에러메세지가 나타납니다. 에러메세지는 오류의 원인과 종류를 파악하고 대처하는 일에 큰 도움이 됩니다. 하지만 웹 페이지를 사용하다가 에러메세지가 나타나고 이를 사용자가 확인하게 되는 상황은 보안적 관점에서 커다란 문제가 됩니다. 에러메세지를 통해서 서버의 시스템 정보 등이 유출될 수 있기 때문입니다.
그렇기에 에러메세지는 별도의 에러 페이지로 리다이렉트 되도록 처리하여 웹 페이지 사용자에게 노출되지 않도록 설정해야 합니다.
'AI 스쿨 리팩토링 보안직무 과정' 카테고리의 다른 글
36주차 과제 (상) - DVWA, KALI LINUX 설치 (1) | 2023.11.07 |
---|---|
35주차 과제 - 프록시 서버 (0) | 2023.10.31 |
33주차 과제 - 웹 쉘 (0) | 2023.10.26 |
32주차 과제 - 웹 취약점 (3) (0) | 2023.10.24 |
31주차 과제 - 웹 취약점 (2) (0) | 2023.10.24 |
댓글