🔥 웹 개발자와 정보보안 입문자가 꼭 알아야 할 웹 해킹 & 시큐어 코딩
위아래 1줄씩 띄우고 중요한 부분은 볼드 효과
📍 XSS란?
👉🏻 Cross-Site Scripting: 클라이언트 언어(HTML, CSS, Javascript)가 사용된 악의적인 스크립트
👉🏻 CSS가 이미 사용 중이므로 헷갈리지 않기 위해 XSS로 표기
👉🏻 A사이트에서 B사이트로 이동시키는(cross-site) 공격
📍 공격 대상
공격자 > /vuln.jsp?input=hello+world
> 웹페이지 URL: http://www.victim.co.kr/vuln.jsp?input=hello+world
hello world
👉🏻 기능적인 공격 대상 - 어플리케이션에서 어떤 공격을 진행할지
// 공격 대상이 사용자인 만큼 어플리케이션 언어를 사용하며 WAS는 해당 언어를 이해하지 못하므로 그저 정적 소스로 뿌림
👉🏻 엔드 포인트단의 공격 대상 - 사용자를 공격함
(SQL, OS, XXE Injection은 서버를 공격하지만 XSS는 사용자를 대상으로 하는 경우가 많음)
👉🏻 서버 웹 취약점을 강화할수록 공격자들이 자연스럽게 사용자/어플리케이션 대상으로 많이 공격하게 됨
📍 공격 유형
👉🏻 피싱: 악의적인 사용자가 유도한 사이트로 리다이렉션
👉🏻 악성코드 유포: 강제 악성코드 다운로드 및 실행 후 악성코드 설치, Drive-by Download / 취약한 웹브라우저인 IE를 사용할 때 많이 걸림
👉🏻 XSS Tunnel: 사용자 웹 브라우저 권한 획득 및 대부분의 행위 가능
👉🏻 세션 하이재킹: 사용자 세션을 탈취 후 세션 재사용 및 권한 탈취
👉🏻 CSRF: 악성 스크립트에 의해 악의적인 사용자가 의도한 행위를 함
📍 공격 기법
// URL의 값을 가지고 와 실제 입력값에 해당 값이 있는지 확인하고 동적 페이지를 구성함
// Client Side
👉🏻 DOM-BASED XSS: 웹 브라우저에서 사용자 입력 값을 통해 동적 페이지 구성
// 서버에서 온 응답값을 가지고 동적 페이지를 구성함
// Server Side
👉🏻 REFLECTED XSS: 서버 측에서 사용자 입력 값을 통한 동적 페이지 구성
// 공격자가 DB에 악의적인 스크립트를 저장해 두고 사용자가 그것을 조회할 때 동적 페이지 구성하여 공격
// Back-End Database
[고급정보입니다. -공격자] > 공격자가 게시글 작성하여 DB에 악의 스크립트 저장
> 사용자가 해당 게시글 클릭 시 DB에서 악의 스크립트를 SELECT 해 옴으로써 뿌려지게 됨
👉🏻 STORED XSS: 데이터베이스에 저장된 데이터를 통한 동적 페이지 구성(Persistent, 지속 가능성 있으며 가장 흔함)
📍 공격 원리 분석
공격자 > http://www.victim.co.kr/vuln.jsp?value=[악성스크립트]
사용자 > 클릭
> http://www.victim.co.kr 서버 접속 후 정상 응답값을 던짐
화면단에서 악의 스크립트 페이지 구성을 해석하고 공격자 서버에 접속하는 등 공격자의 의도와 같은 행위를 하게 됨
👉🏻 DOM-BASED XSS 구성
공격자 > http://www.victim.co.kr/vuln.jsp?value=[악성스크립트]
사용자 > 클릭
> http://www.victim.co.kr 서버 접속 후
악성 스크립트가 담긴 응답값을 던짐
👉🏻 REFLECTED XSS
공격자 > http://www.victim.co.kr/vuln.jsp?value=[악성스크립트]를 DB에 저장함
사용자 > 해당 내용을 조회하면서 악의적인 스크립트를 실행
👉🏻 STORED XSS
📍 세션 하이재킹에 대한 이해와 공격 원리 분석
👉🏻 Session Hijacking: 세션 탈취를 통해 아이디/패스워드를 몰라도 사용자 계정을 도용하는 것
공격자 > 탈취한 세션을 통한 사용자 계정 도용 > 사용자에게 공격자 서버 접근하라고 명령
📍 대응 방안
👉🏻 서비스성과 보안은 서로 상반된 관계로 대응하기 까다로운 편
👉🏻 숫자, 단순 문자(+숫자)일 경우 정규식
👉🏻 문자+특수문자일 경우 HTML을 사용하지 않는다면 HTML Entity Encoding, 사용한다면 보안 라이브러리나 정규식 사용하는 등 용도에 따라 다른 프로세스를 수립해야 함