- 보안이란 무엇인가?
1. 정보 보안의 3가지 요소
1) 무결성 : 권한을 가진 사람만 정해진 방법으로 정보를 변경할 수 있어야 한다.
나의 개인정보를 변경할 수 있는 사람은 일반적으로 나 자신뿐이다. 모르는 사람이 갑자기 나의 이름(id)과 비밀번호를 바꿀 경우 무결성이 침해된 것이다. 민감한 정보뿐만 아니라, 모두에게 공개되는 나의 닉네임을 누군가 함부로 바꾸는 경우 등에도 무결성이 침해된 것이다.
2) 기밀성 : 권한을 가진 사람만 정보에 접근할 수 있어야 한다.
나의 금고를 열 수 있는 건 나 자신뿐이다. 원하지 않는 사람이 내 금고 안에 있는 내용(개인정보, 비밀번호 등)을 보는 것은 기밀성이 침해된 것이다. 위에서 나온 경우처럼 모르는 사람이 나의 개인정보를 함부로 변경할 때, 개인정보를 보면서 변경하였다면 기밀성까지 같이 침해된 것으로 볼 수 있다.
3) 가용성 : 원할 때 정보에 대한 접근이 가능해야 한다. (권한이 있을 때)
필요한 상황에서 나의 금고는 나에 의해 언제나 열릴 수 있어야 한다. 내가 나의 금고를 열려고 하는데, 안 열리는 경우에는 가용성이 침해된 것이다. 일상생활에서 편의점처럼 24시간 언제든 접근 가능한 곳 등은 가용성이 매우 크다고 볼 수 있다. 편의점에 사람이 너무 많아 못 들어가는 경우에는 일상생활에서의 가용성이 침해된 것이다.
2. 웹 보안의 구성
1. 방화벽
이상한 네트워크 패킷을 원천적으로 차단해주는 역할을 한다. 일반적인 웹 서비스라면 tcp 80번, tcp 443번을 제외하면 공개해야할 포트가 많이 없다. 이러한 방화벽은 웹 서비스 자체에 대한 공격은 막지 못한다.
2. 시큐어 코딩
취약점이 될 수 있는 논리적 오류 등을 개발 단계에서 개발자가 신경쓰는 개발기법이다. 프로그래밍을 할 때 보안에 신경써서 제작하는 게 중요하다.
3. 데이터 보안
DB에 저장되어 있는 데이터에 대한 보안에도 신경써야 한다. 특히 DB 서버와 애플리케이션 서버가 분리되어 있는 경우에는 더 관심을 가지고 관리해야 한다.
4. 로그 관리
웹 서버의 로그가 잘 기록되도록 해야 한다. 로그를 분석하면서 공격이 이루어진 정황을 찾아낼 수 있다.
5. 접근 관리
웹 서버에 접근하는 것에 대한 관리도 필요하다. root나 administrator 계정이 유출되지 않도록 주의하며, 이를 위해서 안전한 운영체제를 사용하고, 악성코드 같은 것들을 주의해야 한다.
3. 보안에 대한 기본적인 오해
- 규모(회사 규모나 개발 규모)가 작은 웹 서비스에도 공격이 행해진다. 하물며 바이러스 같은 건 일반 컴퓨터 사용자에게까지 크게 전파되며, 불특정 다수에게 공개되는 웹 서비스는 당연히 공격을 받는다.
- FrontEnd에도 보안 공격이 일어난다. 개인적으로 FrontEnd, BackEnd 중 보안에 더 신경써야 하는 분야를 고르라고 하면 못 고를 것이다. 어느 개발 분야이든 보안은 다 중요하다.
- 많은 사람이 사용한다는 게 안전하다는 보장은 아니다.
- 웹 서비스에 공격을 하는 사람은 정말 상상도 못한 방법을 동원할 때도 있다. (운영자 납치 등)
- 내부자에 의한 보안 사고가 꽤 발생한다. 고의적으로 사고를 일으켰던, 단지 개발과정에서 스파게티 코드로 인한 의도하지 않은 정보 유출 등. 특히 의도하지 않은 정보 유출은 당장은 눈에 보이는 피해가 없더라도 나중에 공격을 받았을 때 피해를 크게 증폭시키게 된다.
- 프로그래밍을 못하는 해커도 존재한다. 자동화 툴이 많이 발달되어 있다.