일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- BFS
- MVC
- cloud computing
- jsp
- 코딩테스트
- data structure
- 공개키 암호화
- generic class
- 알고리즘
- 자바의정석
- Stack
- 생성자
- 코테
- Java
- Algorithm
- dbms
- 클라우드 컴퓨팅
- python
- DB
- 크루스칼
- javascript
- sql
- 가상컴퓨팅
- dfs
- 암호학
- spring
- JPA
- Queue
- 자료구조
- JDBC
- Today
- Total
PLOD
[crypto] Web Security 본문
1. ASLR(Address Space Layout Randomization)
리눅스 메모리 보호기법, 충분한 randomness를 요구로 하여 직접적인 메모리 참조가 힘들어 진다. 하지만 프로그램 코드에는 적용하지 못하고 오로지 라이브러리에만 적용 가능하다는 단점과 주소의 시작 주소만 바뀌기 때문에 address leak를 한다면 다른 함수도 결국 접근 가능하다는 단점이 있다.
과거의 App들은 C나 C++로 작성되었지만 현재는 Web 기반 서비스들이 주류이기 때문에 SQL injection이나 XSS, session Hijacking, CSRF 같은 공격들을 대비하여야 한다.
web에서의 Request type은 GET과 POST로 나누어 진다. GET은 모든 데이터가 URL 자체에 있기 때문에 브라우저 히스토리에 남는다.그렇기 때문에 GET request는 중요한 정보를 다루지 않는다. GET Request는 서버의 리소스에서 데이터를 요청할 때 사용한다. POST는 데이터와 URL을 분리하였기 때문에 히스토리에 남지 않는다. 서버의 리소스를 새로 생성하거나 업데이트 할 때 사용한다.
2. SQL injection
SQL injection 이란 데이터베이스에 전송되는 SQL query를 조작하여 데이터를 변조하거나 , 허가되지 않은 정보에 접근하는 공격이다. 주로 개인정보를 빼낼 때 많이 사용되는 attack 기법이다.
위를 예시로 들자면 , 정상적인 웹 요청이나 응답에서는 사용자가 username에 ID를 입력하고 password를 입력하면 서버는 DB에서 해당 ID가 있는지 검색하고 정보가 있으면 검색 결과를 사용자에게 전송한다.
그러나 만약에 'frank' OR 1 = 1); -- 을 입력하면 WHERE 구문이 우회되어 DB내의 모든 사용자의 정보를 볼 수 있다.
번외로, 만약에 username에 'frank' OR 1 = 1); DROP TABLE Users; -- 을 입력하게 되면 DROP TABLE 명령어를 사용할 수 있게 되어 DB 내의 모든 데이터를 삭제할 수 있게 된다.
3. session Hijacking
session hijaking은 웹 브라우징 시 세션 관리를 위해 사용되는 session ID를 스니핑이나 무작위 추측 공격을 통해서 도용하는 기법이다.
session hijaking을 이해하기 위해서는 cookie라는 개념이 필요한데, cookie는 HTTP라는 stateless protocol을 session을 구현하기 위해서 cookie를 사용하여 stateful하게 만드는 것이다. user가 웹사이트를 방문하게 되면 cookie 기록이 남는다. session hijacking은 cookie 기록을 steal하는 Network - based attack 방식이다.
4. Cross-Site Request Frogery(CSRF)
앞서 설명했듯이, GET request는 서버에 대한 정보(ex. 히스토리)를 가지고 있으므로 보안적인 측면에서는 되도록 사용하지 않는 것이 좋다. CSRF는 정상적인 사용자가 의도하지 않았지만, 자신도 모르게 취약 서버를 공격하는 경우이다. CSRF는 사용자가 취약한 사이트로 이동하는 공격자가 만든 link를 클릭함으로써 실행된다.
CSRF를 방어하기 위해서 REFERER 검증 방식이 있다. 요청 헤더 정보에서 referer 정보를 확인 할 수 있다. referer 값에 대한 검증 만으로 CSRF는 방어가 어느 정도 가능하지만 공격자가 referer 정보를 삭제할 수도 있거니와 , 모든 브라우저에 referer 정보를 확인 할 수 없고 애초에 referer 정보를 막아놓으면 referer 정보를 확인할 수 없는 경우도 있다. 그렇기 때문에 CSRF를 확실히 막기 위해서는 링크마다 secret 정보를 보함하여 정보를 추측하기 어렵게 하는 방식도 있고 Ruby / Rail를 통해 방어기법을 구현 하여 막을 수 있다.
'computer science > Cryptography' 카테고리의 다른 글
[crypto] secret key cryptography (0) | 2023.07.07 |
---|---|
[crypto] Software Security (0) | 2022.12.08 |
[crypto] SSL/TLS (0) | 2022.12.08 |
[crypto]Authentication Protocols (0) | 2022.12.07 |
[crypto] Hash (0) | 2022.12.05 |