Chapter3. 웹 공격의 종류
1.SQL injection 공격에 대해 이해할 수 있다. (사용자의 입력값을 무조건 신뢰하면 안되는 이유에 대해 이해할 수 있다.)
2.XSS 공격에 대해 이해할 수 있다. (Stored XSS와 Reflected XSS의 차이에 대해 설명할 수 있다.)
3.CSRF 공격에 대해 이해할 수 있다.
4.Clickjacking 공격에 대해 이해할 수 있다.
Chapter4. Token / OAuth
5.토큰의 개념을 이해할 수 있다. (Refresh Token과 Access Token의 차이를 이해한다.\)
6.쿠키 / 세션 방식과 토큰 방식의 차이를 이해할 수 있다.
7.JWT의 작동원리에 대해 이해할 수 있다. (header, payload, signature가 각각 어떤 역할을 하는 지 이해할 수 있다), (JWT가 어떻게 토큰의 변조를 판별하는 지 이해할 수 있다)
8.토큰 방식의 한계를 이해할 수 있다.
9.Authentication과 Authorization의 차이를 이해할 수 있다.
10.OAuth의 키워드를 설명할 수 있다. (Authorization Code와 Access Token의 차이에 대해 이해할 수 있다), (Authorization 서버와 Resource 서버의 차이에 대해 이해할 수 있다)
1.SQL injection 공격이란 내부 값을 혼동시켜 추가로 입력한 값 까지를 명령어로 인식하게 만들어 내부 정보를 빼오거나 데이터를 지우는 등의 공격을 하는 방식으로 사용자의 입력값과 명령 부분을 독립적으로 처리하게 하거나 영향을 주는 부분을 입력하지 못하게 하는 등의 조치를 해야한다.
2.XSS(Cross-Site Scripting)는 공격자가 악의적인 스크립트를 심어놓는 행위로 서버에 저장해 지속적으로 피해를 줄 수 있는 Stored XSS와 URL 파라미터를 사용해 스크립트를 만드는 일시적 또는 비 지속적으로 피해를 줄 수 있는 Reflected XSS기법이 있다.
3.CSRF(Cross-Site Request Forgery)공격은 이름처럼 타 사이트에서 요청을 위조하는 방식이다. 실제 요청 내용(송금/개인정보 전송 등 악의적 행동)과는 다르게 혜택을 보는 듯한 링크를 제공한 후 피해자가 링크를 누를 경우 실제로는 송금 등의 기능을 하게 만들어 기관에서는 피해자가 요청했다고 생각하고 허용하고 피해자는 단지 링크를 클릭했을 뿐이지만 돈이 인출되게 만드는 방식이다.
4.CSRF와 유사하지만 다른 방식으로 눈속임을 하는 공격법이다. 클릭하는 내용에 표시되는 것과 실제 동작하는 기능이 다르게 만들어 피해자가 정보를 기입하면 그 정보를 바탕으로 개인정보를 탈취하거나 컴퓨터의 제어권을 빼앗는 등의 행동을 할 수 있다.
5.토큰이란 민감한 개인정보를 계속해서 인증에 사용하게 되면 공격자가 탈취할 우려가 있으므로 토큰이라는 인증권한을 제공해 사용하게 만드는 방식이다.
토큰에는 Access Token과 Refresh Token이 있는데 Access Token은 승인받았다는 의미의 일반적인 토큰으로 유효기간이 짧으며 Refresh Token은 Access Token을 자주 발급하기 애매한 경우 더 긴 유효기간을 두고 Access Token을 자동 발급해주는 역할을 하는 토큰이다. 그렇기 때문에 Refresh Token이 탈취될 경우 위험할 수 있어 사용하지 않는 곳도 많다.
6.쿠키는 데이터를 클라이언트측에 보관하는 방식이고 세션은 서버측에 저장하는 방식이지만 각각의 장단점이 있는데 장점을 모아 만든 것과 유사하게 쿠키처럼 클라이언트측에 데이터를 보관시키지만 중요정보는 토큰화해서 세션을 사용한 것 처럼 보안성 또한 챙길 수 있다. 서버에는 클라이언트의 정보를 보관하지 않고 토큰에 간한 가벼운 정보만 보관하기 때문에 서버 확장도 용이하며 안전하고 권한설정을 따로 하기에도 편하다.
7.JWT(Json Wep Token)는 Header, Payload, Signature로 구성되어 있으며 Header는 어떤 알고리즘으로 암호화 할지에 대해 JSON 형식으로 정보를 담고 있으며 Payload는 서버에서 활용할 수 있는 유저의 정보가 base64방식으로 인코딩되어 담겨있고 Signature로 서버의 비밀키와 헤더에서 지정했던 알고리즘을 이용해 암호화를 한다. Payload를 변조하여 제공하더라도 시그니처값과 다르기 때문에 변조를 확인할 수 있다.
8.토큰은 강제로 만료시킬 수 없기 때문에 만약 탈취당한다면 만료까지 계속해서 공격자에게 이용당할 수 밖에 없는 단점이 있으며 이를 극복하고자 짧게 한다면 사용자의 불편함을 초래한다.
9.Authentication은 인증하는 절차를 의미하며 Authorization은 토큰을 주는 등의 권한을 부여하는 방식이다. 간단하게 말해서 Authorization으로 권한을 주고 재 접근시 Authentication을 통해 확인한다.
10.Authorization Code는 Authorization Grant의 한 타입으로 액세스 토큰을 발급받기 위한 Code를 의미하며 Access Token은 발급을 받았다는 인증서 같은 역할을 한다. 위에서 언급했던 것 처럼 Code를 통해 토큰을 발급하고 토큰을 통해 인증을 받을 수 있다.
Resource Server는 클라이언트의 요청을 수락하고 응답할 수 있는 데이터가 저장되어 있는 서버이며 Authorization Server는 토큰을 발급하 인증 서버로 사용자가 요청 후 인증할 경우 Resource Server에 토큰을 발급한다.
백엔드과정을 짧은 시간에 지나치게 구겨넣는 느낌을 계속해서 주고 있다..
전반적인 내용을 잘 이해해서 언젠가는 써먹을 수 있으면 좋겠다.
'회고' 카테고리의 다른 글
| 학습(알고리즘) (0) | 2022.07.17 |
|---|---|
| 학습(알고리즘) (0) | 2022.07.16 |
| [Backend] 인증 / 보안 (0) | 2022.07.14 |
| [네트워크] 심화 (0) | 2022.07.13 |
| [사용자 친화 웹] 웹 표준 & 접근성-3 (0) | 2022.07.12 |
