참고: https://developer.mozilla.org/en-US/docs/Web/Security/Types_of_attacks#cross-site_scripting_xss
Clickjacking is the practice of tricking a user into clicking on a link, button, etc. that is other than what the user thinks it is. This can be used, for example, to steal login credentials or to get the user's unwitting permission to install a piece of malware. (Click-jacking is sometimes called "user interface redressing", though this is a misuse of the term "redress".)
Clickjacking은 악의적인 내용을 담은 링크나 버튼 등을 다른 기능을 하는 것처럼 위장시켜 사용자가 누르게 만드는 인터페이스 기반 공격이다. 페이지에 버튼이나 링크를 삽입해두고, 감염된 사이트에서 사용자가 링크를 클릭하면 공격자는 유저의 개인 정보를 얻거나 손상시킬 수 있다.
Content Security Policy나 Set-Cookie 속성을 구현하여 예방할 수 있다.
Cross-Site Scripting은 클라이언트 코드에 악의적인 스크립트를 주입하는 공격이다. 이는 웹 애플리케이션으로 전송되는 데이터가 유효성 검사를 충분히 거치지 않았거나, 확인되지 않은 경로로 데이터가 입력되면서 일어난다. 이러한 스크립트들은 사용자를 가장하여 쿠키, 세션 토큰, 혹은 사이트의 민감한 정보에 접근하거나 아예 HTML 내용을 수정하기도 한다.
- 쿠키나 세션 토큰 등 인증정보 탈취
- 접속자를 악의적인 페이지로 리다이렉트
- 정상적인 사이트로 위장하여 사용자의 컴퓨터에 악의적인 공격(악성코드 다운로드, 인증정보 탈취 등)
xss 공격은 주로 js로 이루어지나, 때에 따라 브라우저가 실행하는 어떤 종류의 코드로든(html, flash, ...) 실행될 수 있다.
XSS는 3가지 종류로 분류할 수 있다.
The injected script is stored permanently on the target servers. The victim then retrieves this malicious script from the server when the browser sends a request for data.
주입된 스크립트는 표적이 된 서버에 저장되고, 사용자가 이 사이트에 요청을 보낼 때 악의적인 스크립트가 서버에서 브라우저로 전송된다.
서버에 저장된다는 의미가 무엇인가 했는데, 게시판 같은 기능을 생각하면 되는 것 같다.
예를 들어 xss 대비가 되어있지 않은 게시판에 cookie에 담긴 session id를 alert에 띄우는 js를 내용으로 넣고, 이를 저장하면 이 게시글에 들어갈 때마다 alert가 뜰 수 있게 된다.
When a user is tricked into clicking a malicious link, submitting a specially crafted form, or browsing to a malicious site, the injected code travels to the vulnerable website. The Web server reflects the injected script back to the user's browser, such as in an error message, search result, or any other response that includes data sent to the server as part of the request. The browser executes the code because it assumes the response is from a "trusted" server which the user has already interacted with.
사용자가 악의적인 링크를 누르거나, 조작된 폼을 제출하거나, 악의적인 사이트에 방문하여 주입된 스크립트가 요청에 담겨 서버로 전달된다. 웹 서버는 이 주입된 스크립트(ex: 에러 메시지, 검색 결과 등)를 응답에 끼워 사용자의 브라우저에 그대로 띄운다. 브라우저는 서버가 스크립트에 영향받았다는 사실을 파악하지 못하고 해당 서버에서 온 응답을 정상적인 코드로 간주하여 이를 그대로 실행하게 된다.
xss는 피해자에게 직접적으로 공격을 할 수 있지만, csrf는 피해자뿐만 아니라 서버 내의 다른 사용자들에게도 피해가 갈 수 있다.
The payload is executed as a result of modifying the DOM environment (in the victim's browser) used by the original client-side script. That is, the page itself does not change, but the client side code contained in the page runs in an unexpected manner because of the malicious modifications to the DOM environment.
사용자의 DOM 환경을 변경하여 xss 공격을 실행할 수도 있다. 페이지 자체의 내용은 변경되는 것이 없지만, DOM 환경을 악의적으로 변경하여 페이지에 포함된 클라이언트 측 코드가 예상하지 못한 방향으로 실행된다.
CSRF (sometimes also called XSRF) is a related class of attack. The attacker causes the user's browser to perform a request to the website's backend without the user's consent or knowledge. An attacker can use an XSS payload to launch a CSRF attack.
CSRF는 XSS와 유사하게, 공격자가 사용자의 동의를 구하지 않았거나 사용자가 공격을 인지하지 못하는 상황에서 사용자의 브라우저가 서버에 임의의 요청을 하게 만드는 공격이다. XSS 공격으로 탈취한 정보들은 CSRF 공격에 사용될 수 있다.
A third party intercepts traffic between a web server and a client (browser), and impersonates the web server in order to capture data (such as login credentials or credit card information). The traffic is passed through, possibly with alterations. Open Wi-Fi networks are typical means of executing this attack.
제3자가 서버와 클라이언트(브라우저) 간의 트래픽을 가로채, 로그인 자격 증명이나 신용정보 등의 데이터를 캡처하기 위해 웹 서버를 가장하는 공격이다. 트래픽은 통과되는 과정에서 변경될 수 있다. 일반적으로 개방형 Wi-Fi 네트워크 환경에서 실행된다.
세션 하이재킹은 공격자가 사용자의 인증된 세션에 접근하거나 오용하는 것으로, 기존 세션의 쿠키를 훔치거나, 브라우저에 미리 결정된 세션ID로 쿠키를 설정하는 것으로 발생할 수 있다.
이는 주로 세션 고정을 통해 실행된다. 세션 고정은 공격자가 애플리케이션에 로그인하여 발급받은 세션 id나 쿠키 등을 사용하여, 사용자가 로그인할 때 이를 동일한 세션으로 전송되게 하여 개인정보를 탈취하거나, 상위 도메인을 동일한 쿠키로 접근하여 csrf 보호를 우회하는 등의 공격을 가능하게 만든다.
세션 고정은 사용자의 인증 과정에서 (쿠키가 있어도) 세션 쿠키 값을 새로 생성하고 CSRF 토큰을 사용자에게 연결하는 것으로 완화할 수 있다.