정보시스템 구축관리 4강. 소프트웨어 개발 보안
보안 사고의 대부분은 뚫린 게 아니라 열려 있던 것입니다. 공격자가 대단해서가 아니라, 개발자가 사용자를 믿었기 때문이죠.
풀고 시작
지켜야 할 것은 세 가지입니다
보안의 목표는 셋으로 요약됩니다. 기밀성은 권한 없는 사람이 내용을 보지 못하게 하는 것, 무결성은 권한 없는 사람이 내용을 바꾸지 못하게 하는 것, 가용성은 권한 있는 사람이 필요할 때 쓸 수 있게 하는 것입니다. 앞의 두 개만 챙기다 보면 아무도 못 쓰는 시스템이 되기 쉬워서, 세 번째가 함께 놓여 있다는 점이 중요합니다.
여기에 행위를 부인하지 못하게 하는 부인 방지와, 상대가 주장하는 사람이 맞는지 확인하는 인증이 더해집니다.
취약점은 일곱 갈래로 분류합니다
행정안전부의 소프트웨어 개발 보안 가이드는 취약점을 일곱 유형으로 나눕니다. 이 분류가 그대로 출제됩니다.
| 유형 | 대표 사례 |
|---|---|
| 입력 데이터 검증 및 표현 | SQL 삽입, 크로스 사이트 스크립팅, 버퍼 오버플로 |
| 보안 기능 | 부적절한 인가, 취약한 암호 알고리즘 사용 |
| 시간 및 상태 | 경쟁 조건, 종료되지 않는 반복 |
| 에러 처리 | 오류 메시지를 통한 정보 노출 |
| 코드 오류 | 널 포인터 역참조, 자원 반환 누락 |
| 캡슐화 | 잘못된 세션에 의한 데이터 노출 |
| API 오용 | 취약한 API 사용 |
가장 많이 나오는 것은 첫 줄입니다. SQL 삽입은 입력창에 SQL 조각을 넣어 데이터베이스를 조작하는 공격입니다. 아이디 입력란에 참이 되는 조건식을 넣어 비밀번호 없이 로그인하는 그 수법이죠. 막는 방법은 명확합니다. 입력값을 질의문 문자열에 이어 붙이지 말고 파라미터를 분리한 질의문을 쓰는 것입니다.
크로스 사이트 스크립팅(XSS)은 게시판 같은 곳에 악성 스크립트를 심어 그 페이지를 보는 다른 사용자의 브라우저에서 실행시키는 공격입니다. 입력값의 특수 문자를 변환해 걸러 내야 합니다.
버퍼 오버플로는 정해진 공간보다 큰 데이터를 넣어 인접한 메모리를 덮어쓰는 공격입니다. 3강에서 배열 범위를 넘어서면 남의 메모리를 건드린다고 했던 그 이야기가 여기서 공격 기법이 됩니다.
경쟁 조건(race condition)도 알아 두세요. 검사하는 시점과 사용하는 시점 사이의 틈을 노려, 그 사이에 대상을 바꿔치기하는 공격입니다. 이름도 검사 시점과 사용 시점을 딴 TOCTOU라 부릅니다.
암호화는 두 갈래입니다
대칭 키 암호화는 암호화와 복호화에 같은 키를 씁니다. 빠르지만 키를 안전하게 전달하는 문제가 남고, 사람이 늘수록 필요한 키가 급격히 늘어납니다. DES와 그 후계인 AES, 국내에서 만든 SEED와 ARIA가 여기 속합니다.
비대칭 키 암호화는 공개 키와 개인 키를 짝으로 씁니다. 공개 키로 잠근 것은 개인 키로만 열 수 있으니 키를 미리 나눠 갖지 않아도 되죠. 대신 느립니다. 대표는 큰 수의 소인수분해가 어렵다는 성질에 기댄 RSA입니다. 그래서 실제 시스템은 둘을 섞어 씁니다. 본문은 빠른 대칭 키로 암호화하고, 그 대칭 키만 비대칭 키로 감싸 보내는 식이죠.
해시는 방향이 다릅니다. 어떤 길이의 값이든 고정 길이로 바꾸는 일방향 함수라 되돌릴 수 없습니다. 그래서 비밀번호 저장에 씁니다. SHA 계열이 표준이고 MD5는 충돌이 발견되어 더는 권장되지 않습니다. 같은 비밀번호가 같은 해시가 되는 것을 막으려고 임의의 값을 덧붙이는데, 이를 솔트라고 합니다.
접근 통제 방식도 셋으로 나옵니다. 자원 소유자가 권한을 주는 임의적 접근 통제(DAC), 관리자가 정한 보안 등급에 따르는 강제적 접근 통제(MAC), 역할에 권한을 묶고 사람에게 역할을 주는 역할 기반 접근 통제(RBAC)입니다. 조직에서 실제로 가장 널리 쓰이는 것은 세 번째입니다. 사람이 바뀌어도 역할은 남으니까요.
다음 강에서는 개발 단계를 넘어 운영 중인 시스템을 노리는 공격 유형을 봅니다.
인출 문제
생각해볼 질문 (정답 없음)
보안을 강화할수록 사용은 불편해집니다. 이 맞바꿈에서 선을 긋는 사람은 개발자여야 할까요, 사용자여야 할까요.
이전: 3강 신기술 동향과 시스템 구축 · 다음: 5강 시스템 보안과 공격 유형