보안의 개념 및 전략
보안은 21세기 웹 기반 애플리케이션의 가장 중요한 아키텍처 구성 요수 중 하나다.
악의적인 목적을 가진 사람뿐 아니라 악성 코드와 사이버 범죄 등이 항상 존재하고,
소프트웨어 취약점이 지속적으로 발견되는 이 시대에 보안에 대한 현명하고 포괄적인 통찰력은 개발자로서 장차 맡게 될 프로젝트를 위해 지녀야 할 필수 요소이다.
하지만 나는 수많은 프로젝트를 경험해 봤지만 보안 쪽을 신경 써서 개발한 프로젝트를 경험해 보지 못했다.
항상 보안 쪽 개발 소스는 스파게티 소스이고 알아볼 수도 건드릴 수도 없게 되어있는 경우가 많았다.
이건 보안 쪽만의 문제는 아니긴 하다... 모든 소스가 그렇다.
내가 그렇고 그런 사이트만 돌아다녀서 그런 건가...
아무튼 각설하고 다시 본론으로 넘어와서,
애플리케이션 보안을 구현하고 이해하는 데 필요한 핵심 개념 두 가지가 있다.
그 두 가지는 인증(Authentication), 권한 부여(Authorization)이다.
(나는 이 두 영어가 볼 때마다 헷갈린다...)
첫 번째, 인증(Authentication)
"자원을 요청하는 사용자를 식별하는 것"
인증의 종류는 다음과 같다.
1. 자격 증명 기반 인증(Credential-based authentication)
- 일반적인 사용자명, 패스워드 기반 인증
2. 이중 인증(Two-factor authentication)
- 은행의 현금 자동 입출금기에서 현금을 인출하거나 다른 거래를 진행하려면 계좌 카드 또는 통장을 넣고,
패스워드까지 입력해야 한다. 이렇게 계좌 카드와 같은 물리적인 기기와 패스워드를 이용한 인증은 가장 일반적인 이중 인증의 한 예다.
3. 하드웨어 인증(Hardware authentication)
- 차에 시동을 걸기 위해서는 키를 점화 장치에 꽂고 돌려야 한다.
키의 돌출부와 점화 스위치의 텀블러가 정확히 맞물리면 하드웨어 인증이 성립된다.
두 번째, 권한 부여(Authorization)
"인증 과정에서 검증된 정보를 사용해 특정 자원에 대한 접근 가능 여부를 판별"
권한 부여의 두 가지 측면은 일반적으로 보안 시스템에 대한 접근 가능 여부를 판단할 때 사용한다.
1. 인증된 주체에게 하나 또는 그 이상의 권한(역할 Roles)을 부여하는 것이다.
예를 들어 웹 사이트의 일반적인 사용자에게는 방문자 권한을 부여하지만 사이트의 관리자에게는 관리자 권한을 부여
2. 시스템의 보안 자원(Secured resource)에 접근할 때 권한 체크 기능을 구현하는 것이다.
일반적으로 권한 체크 기능은 개발을 할 때 코드를 통해 명시적으로 선언하거나 매개변수를 통해 구현한다.
예를 들어 다른 사용자의 이벤트를 볼 수 있는 화면에는 관리자 권한이 있는 사용자만 접근할 수 있다.
그럼 어떻게 보안을 구성해야 할까?
먼저 민감한 데이터에 대한 암호화 또는 마스킹 처리가 필요하다.
그리고 전송계층은 개인정보를 포함하고 있는 애플리케이션에서는 SSL을 적용하고 있지만 전송계층에서의 데이터 탈취 및 변조에 대응해야 한다.
여기까지 보안에 대한 간략한 개념 및 전략을 살펴보았다.
이제부터 앞으로 하나씩 구현 방법을 살펴보고자 한다.
본 글은 "스프링 시큐리티를 이용한 애플리케이션 보안(에이콘 출판사)"의 내용을 인용하였다.