seegongsik
보안

어떻게 안전을 설계하는 원칙

보안이라고 하면 멋진 암호 기술 하나를 떠올리기 쉽다. 하지만 자물쇠가 아무리 튼튼해도 문을 활짝 열어 두면 소용이 없어요. 정말 안전한 집은 자물쇠 하나로 만들어지지 않는다. 누구에게 어떤 열쇠를 줄지, 한 겹이 뚫리면 무엇이 막을지, 모르는 손님을 들일지 막을지, 구조가 단순한지 복잡한지 같은 설계의 약속이 모여 안전을 만든다. 지난 강까지 배운 암호, 인증, 방화벽, 사람의 습관도 이 약속 위에 놓일 때 제 힘을 낸다. 그리고 이 약속들은 기술이 바뀌어도 오래 살아남아요.

01

필요한 만큼만, 최소 권한

운영체제를 다룬 강들에서 프로그램과 사용자마다 권한을 나누고 거두는 모습을 봤다. 그 생각을 보안 설계로 넓혀 보자. 누군가에게 권한을 줄 때는 맡은 일에 꼭 필요한 만큼만 준다. 잠깐 보기만 하면 되는 사람에게 고치는 권한까지 줄 까닭은 없어요.
그리고 일이 끝나면 그 권한을 거둔다. 권한이 적을수록, 그 계정이 털리거나 실수가 생겨도 피해가 번질 범위가 작아진다. 평소에는 일반 계정으로 쓰고 관리자 권한은 필요할 때만 꺼내 쓰라는 조언도 같은 원리에서 나와요.

맡은 일: 잠깐 내용을 보기만 하면 된다
위험 범위
이 사람에게 줄 권한 고르기

한 사람에게 줄 권한을 골라 보자. 필요한 만큼만 주면 위험 범위가 작고, 과하게 주면 잃을 것이 커진다.

필요한 만큼만 줬을 때가 가장 깔끔했다. 과한 권한은 평소에는 편해 보여도, 무언가 어긋나는 순간 피해를 키워요. 최소 권한은 사람에게만 적용되는 것이 아니다. 프로그램과 기계에도 똑같이 적용해요. 이 부품은 딱 이 일만 하게, 이 프로그램은 딱 이 폴더만 보게 권한의 울타리를 좁게 친다.
하지만 권한을 아무리 잘 나눠도, 그 한 겹이 뚫리는 날은 온다. 그래서 다음 원칙이 필요해요.

02

하나가 뚫려도, 여러 겹 방어

어떤 방어도 절대 뚫리지 않는다고 장담할 수는 없다. 그래서 한 겹에 모든 것을 걸지 않고, 막는 겹을 여러 개 겹쳐 둔다. 바깥 문이 열려도 안쪽 문이 있고, 안쪽 문이 열려도 금고가 있는 식이에요.
한 겹이 실패해도 그 뒤의 겹이 받쳐 준다. 공격하는 쪽은 한 곳만 뚫으면 되던 것이 이제 모든 겹을 다 뚫어야 하고, 겹이 늘수록 끝까지 가기가 어려워진다. 이 영역에서 본 것도 그렇다. 비밀번호 위에 두 번째 인증 단계가 있고, 그 앞에 방화벽이, 오가는 내용에는 암호화가, 맨 앞에는 확인하는 사람의 습관이 있어요.

1바깥 문막는 중
2안쪽 문
3금고
지키는 것
한 겹이 열려도 다음 겹이 막고 있다.

겹을 하나씩 뚫어 보자. 한 겹이 열려도 다음 겹이 막아서, 끝까지 가려면 모든 겹을 통과해야 한다.

한 겹을 열어도 끝이 아니었다. 다음 겹이 또 가로막았어요. 여러 겹을 둘 때는 요령이 하나 있다. 겹마다 성격을 다르게 하는 것이다. 모든 겹이 똑같은 자물쇠라면 하나를 푸는 법이 곧 전부를 푸는 법이 되기 때문이다.
그래서 겹은 종류가 다를수록 든든하다. 그런데 겹을 여러 개 두려면 어디까지 들이고 어디부터 막을지 기준을 분명히 정해야 해요. 그 기준의 출발점이 다음 원칙이다.

03

모르는 것은 막기, 기본은 차단

문을 설계할 때 출발점은 두 가지로 둘 수 있다. 하나는 일단 다 들이고 나쁜 것만 막는 것이고, 다른 하나는 일단 다 막고 허락한 것만 들이는 것이다. 방화벽 강에서 본 대로, 둘 중에는 막고 시작하는 쪽이 더 안전해요.
다 들이고 시작하면 세상의 나쁜 것을 빠짐없이 알아야 막을 수 있는데, 그런 목록은 만들 수 없다. 미처 생각하지 못한 위험이 그대로 들어와요. 반대로 막고 시작하면 내가 분명히 허락한 것만 통과하고, 모르는 것은 저절로 막힌다. 명단에 없으면 못 들어오는 셈이에요.

기본 방침 고르기
기본 방침 고르기

두 출발점을 견줘 보자. 다 들이고 나쁜 것만 막으면 모르는 위험이 새고, 다 막고 허락한 것만 들이면 모르는 것은 저절로 막힌다.

다 들이고 시작한 쪽으로는 생각하지 못한 손님이 슬그머니 새어 들어왔고, 막고 시작한 쪽은 모르는 것을 모두 멈춰 세웠다. 기본을 차단으로 두면 허락 목록에서 무언가를 빠뜨려도 위험한 쪽이 아니라 안전한 쪽으로 기운다.
실수했을 때 손해가 작은 쪽으로 설계하는 것, 이것을 실패해도 안전하게 만든다고 말하기도 해요. 고장 나면 잠기는 금고 문처럼 말이다. 그런데 원칙을 다 지키려고 장치를 덧붙이다 보면 설계가 자꾸 복잡해지고, 그것이 또 다른 위험이 된다. 마지막 원칙이 그 균형을 잡는다.

04

복잡하면 빈틈이 늘고, 단순할수록 안전하다

원칙을 잘 지킨다고 장치를 끝없이 덧붙이면 어떻게 될까? 구조가 복잡해질수록 그 안에 숨은 틈도 함께 늘어난다. 부품이 많고 연결이 얽힐수록 어디가 약한지 한눈에 보이지 않기 때문이에요. 사람이 다 살피지 못하는 구조에서는 살피지 못한 바로 그 자리가 빈틈이 된다.
그래서 좋은 설계는 단순함을 지킨다. 꼭 필요한 것만 두고 없어도 되는 것은 덜어 낸다. 대칭키 암호 강에서 본 것처럼, 좋은 암호는 방법을 숨겨서가 아니라 방법이 공개되어 많은 사람이 따져 봐도 버티기 때문에 믿을 수 있다. 단순하고 열려 있는 설계일수록 그렇게 따져 보기가 쉬워요.

1
부품 수: 1살피지 못한 빈틈: 0
단순하다. 무엇이 어떻게 막는지 한눈에 살필 수 있어요.

구조에 부품을 더하거나 덜어 보자. 복잡할수록 살피지 못한 빈틈이 늘고, 단순할수록 한눈에 살필 수 있다.

부품을 덜어 내니 살필 곳이 줄었고, 덧붙일수록 빈틈이 슬며시 늘었다. 단순함은 게으름이 아니다. 무엇이 정말 필요한지 끝까지 따져 본 결과예요.
네 원칙은 따로 노는 것이 아니라 서로 맞물려 돌아간다. 최소 권한으로 피해가 번질 범위를 줄이고, 여러 겹으로 받치고, 기본은 차단으로 두되, 그 전체를 단순하게 유지하는 것이다. 이제 네 원칙을 한자리에 모아 보자.

05

정리

한데 모으면 이렇다. 좋은 보안은 기술 하나가 아니라 설계 원칙에서 나온다. 최소 권한은 필요한 만큼만 주고 일이 끝나면 거두는 것이다. 여러 겹 방어는 하나가 뚫려도 종류가 다른 다음 겹이 받치게 하는 것이에요. 기본 차단은 허락한 것 말고는 일단 막는 것이고, 단순함은 살피지 못한 빈틈을 줄이는 것이다.
네 원칙은 서로 맞물려 함께 돌아가고, 개별 기술보다 오래 간다. 그래서 새 기술을 만나도 원칙으로 먼저 따져 보면 흔들리지 않아요.

1최소 권한
2여러 겹 방어
3기본은 차단
4단순할수록 안전

네 원칙을 차례로 눌러 되짚는다. 최소 권한, 여러 겹 방어, 기본은 차단, 단순할수록 안전의 순서예요.

이제 안전을 설계하는 네 원칙을 손에 쥐었다. 앞으로 다른 보안 이야기를 만나면 이 원칙들이 길잡이가 돼 준다. 이것은 필요한 만큼만 준 걸까, 한 겹뿐일까 여러 겹일까, 모르는 것을 들이는 쪽일까 막는 쪽일까, 단순한가 괜히 복잡한가를 물으면 된다.
그런데 원칙을 끝까지 밀어붙이면 불편해지는 순간이 온다. 겹을 늘릴수록 로그인은 번거로워지고, 기본 차단은 새 일을 할 때마다 허락을 구하게 만들어요. 다음 강에서는 안전과 편리함 사이에서 무엇을 어떻게 저울질하는지, 이 영역의 마지막 이야기를 본다.

한 줄 정리좋은 보안은 기술 하나가 아니라 설계 원칙에서 나온다. 첫째, 최소 권한이다. 사람이든 프로그램이든 맡은 일에 필요한 만큼만 권한을 주고, 일이 끝나면 거둔다. 권한이 적을수록 털리거나 실수했을 때 잃을 것도 적어요. 둘째, 여러 겹 방어다. 한 겹만 믿지 않고 종류가 다른 겹을 여러 개 둔다. 한 겹이 뚫려도 다음 겹이 받쳐요. 셋째, 기본은 차단이다. 명시적으로 허용한 것 말고는 일단 막으니, 실수가 생겨도 안전한 쪽으로 기운다. 넷째, 단순할수록 안전하다. 구조가 복잡할수록 미처 못 본 빈틈이 늘고, 단순하고 공개된 설계일수록 살피고 따져 보기 쉬워요. 이 원칙들은 개별 기술이 바뀌어도 오래 가므로, 새 기술을 배울 때도 원칙으로 먼저 따져 보면 길을 잃지 않는다.
← 보안
이 페이지가 도움 됐다면 후원하기