본 내용은 Stanford cs 253 web security 강좌를 듣고 개인적으로 정리한 내용입니다.
공격자의 사고방식 알기
attacker의 사고방식대으로 생각하며 코드를 작성해야 취약점을 방지 할 수 있다.
이는 시스템 디자인을 할 때에도 마찬가지이다.
수호자의 사고방식 탑재하기
막기 위해서는 attacker의 방식들을 알아야한다.
공격보다는 공격을 막는 것이 더 어려운 법.
자신의 코드의 취약점을 찾는 것은 결코 쉬운일이 아니다.
"secure" 한 시스템을 만들기를 목표한다.
컴퓨터 시스템을 공격하는 이유는 무엇일까?
1.spam
2.Dos
3.Infect with malware
4.Data theft
위와 같은 공격들이 가능하기 때문이다
+최근에는 mine cryptocurrency, ransomware, political motivation도 핫한 이슈.
그렇다면 web security란 정확하게 무엇일까
우선, web security에는 아래와 같은 종류가 있다
ex. Same Origin Policy: 각각의 tab이 서로 정보를 교환하지 않도록 함
각 site를 "Isolate"하게 작동하도록 하는 policy
클라이언트가 서버를 조작할 수 없도록 하는 것을 위미한다.
공격자는 http 코드를 서버에 전송하여 malicious 코드를 보내기도 함
client를 완전하게 컨트롤 하고 있는 것이 아니기 때문에 이를 방지하는 일은 어렵다
개인 정보 유출로부터 보호
ex) typo squatting: 유저가 종종 저지르는 typo- 오타를 이용해서 원치 않는 url로 가게하는것. example.com이 한 예시
Collusion for Chrome은 크롬의 extension 중 하나로, 브라우저가 connect하는 domain이 어떤 것인지 보여준다. 사용자가 직접 방문한 사이트와 그렇지 않은 사이트를 구분해서 보여준다.
웹 보안, 왜 어려울까??
1) 알지 못하는 사람이 작성한 untrusted 코드를 "securely" 작동 시키려고 하기 때문이다.
2) 서로 다른 site는 상호작용을 하고 있기 때문이다. ("mashups")
3) low-level features ex. gpu 위에서 코드 작동 시키거나, 카메라 작동 시키는 등
4) 높은 performance에 대한 욕망 때문이다.
5) API는 보안을 중점적으로 두고 만들어진 것이 아니기 때문이다.
6) Web은 strict compatibility requirement를 가지고 있기 때문이다. 이는 쉬이 바뀌지 않는다. =>"Don't break the web!!"
기존에는 신용카드 정보를 교환할 경우에만 보안에 신경쓰려고 했다면,
지금은 그렇지 않다. 수 많은 일를 웹 상 처리하는 현재이기 때문에
보안에 신경쓰지 않을 경우, spooping등 다양한 방법으로 감시를 당할 수 있는 것이다.
It's all to easy to criticize, lament, and create pranoid scenarios about the 'unsound security foundations' of the web. Truth is, all of that criticism is true, and yet the web has proven to be an incredibly robust platform.
-Ilya Grigorik, Google web preformance engineer
부족함이 있는 것은 사실이지만, 시간을 거쳐서 조금씩 보안의 취약점을 보완해나간 모양이다.
웹 보안을 공부하기 위해서 위 세가지는 기본적으로 알아야한다.
간단하게 복습하고 지나가는 것이 좋을 것 같다.
*공부해나가며 내가 이용하고 있는 웹에는 취약점이 있지는 않은지 생각해보자