어떻게 문을 지키는 파수꾼, 방화벽
성에는 드나드는 문이 여러 개 있다. 문을 모두 활짝 열어 두면 누구든 마음대로 들어오니, 문마다 파수꾼을 세워 드나드는 사람을 검문한다. 컴퓨터에도 통신이 드나드는 문이 여럿 있어요. 이 문들을 지키며 정해 둔 규칙대로 통신을 검문하는 파수꾼이 방화벽이다. 지난 강의 자물쇠가 이미 열린 연결의 내용을 지켰다면, 방화벽은 어떤 연결을 애초에 들일지부터 정한다. 파수꾼은 무엇을 보고 통과와 차단을 가를까?
문을 지킨다
네트워크 영역에서 통신은 포트라는 번호 붙은 문을 통해 드나든다는 것을 봤다. 웹에 쓰는 문, 메일에 쓰는 문처럼 용도에 따라 문이 나뉘어 있어요. 문을 모두 열어 두면 편하긴 하지만, 누구든 아무 문으로나 들어와 그 뒤에서 돌아가는 프로그램을 건드려 볼 수 있다.
그래서 문 앞에 파수꾼을 세운다. 드나드는 통신을 하나하나 살펴 통과시킬지 막을지 정하는 이 파수꾼이 방화벽이다. 집이나 회사의 공유기처럼 네트워크 입구에 서기도 하고, 컴퓨터 하나하나에 들어 있기도 해요.
들어오는 통신을 눌러 보내 보자. 방화벽이 가운데서 가로막고 검문한다.
통신을 보냈더니 곧장 안으로 들어가지 못하고 방화벽 앞에서 멈췄다. 그냥 통과시키지 않고 일단 세워 검문하는 것, 이것이 파수꾼의 첫 번째 일이에요. 검문 없이 모두 들여보낸다면 파수꾼을 둔 의미가 없다.
파수꾼이 살펴보는 것은 통신에 붙은 겉봉에 가깝다. 어디서 왔는지, 어디로 가는지, 몇 번 문으로 들어가려는지가 거기 적혀 있어요. 그렇다면 그 겉봉을 보고 무엇을 기준으로 통과와 차단을 가를까?
허용과 차단을 규칙으로 정한다
파수꾼은 손에 규칙 목록을 들고 있다. 규칙은 어떤 통신을 허용하고 어떤 통신을 차단할지 적어 둔 것이에요. 예를 들어 웹 서버라면 웹에 쓰는 문은 열고, 쓰지 않는 다른 문은 닫아 두는 식이에요. 출발지나 도착지 주소를 함께 걸어, 정해진 곳에서 오는 통신만 받게 할 수도 있다.
통신이 오면 파수꾼은 규칙을 위에서부터 차례로 맞춰 보고 처음 맞는 규칙을 따른다. 그래서 같은 규칙이라도 놓인 순서가 결과를 바꿀 수 있어요. 어렵게 들리지만 핵심은 단순하다. 문과 규칙을 짝지어 통과와 차단을 가르는 것이다.
문마다 허용이나 차단을 눌러 규칙을 정해 보자. 정한 대로 통신이 통과하거나 막힌다.
규칙을 정하자 결과가 또렷하게 갈렸다. 허용으로 둔 문으로는 통신이 그대로 지나가고, 차단으로 둔 문에서는 가로막혔어요. 같은 통신이라도 어느 문으로 왔고 그 문의 규칙이 무엇이냐에 따라 운명이 달라진 것이다.
그런데 여기서 의문이 하나 생긴다. 웹 사이트를 보려면 사이트가 보낸 응답이 안으로 들어와야 하는데, 들어오는 통신을 막아 두면 어떻게 될까? 요즘 방화벽은 안에서 먼저 시작한 연결을 기억해 두었다가 그 연결의 응답만 골라 들여보낸다. 그렇다면 규칙에 아무것도 적혀 있지 않은 낯선 통신은 어떻게 다뤄야 할까?
기본은 모르는 것은 막기
규칙에 없는 낯선 통신이 왔다고 하자. 파수꾼이 택할 수 있는 자세는 둘이다. 하나는 일단 들여보내고 의심스러운 것만 막는 기본 허용이고, 다른 하나는 일단 막고 허락한 것만 들여보내는 기본 차단이에요.
안전한 쪽은 기본 차단이다. 기본 허용에서는 막아야 할 것을 하나라도 빠뜨리면 그대로 구멍이 되지만, 기본 차단에서는 허용 목록에 깜빡 안 적은 문이 저절로 닫힌 채로 남는다. 실수가 생겨도 열리는 쪽이 아니라 닫히는 쪽으로 생기는 셈이에요.
기본 자세를 눌러 바꿔 보자. 기본 차단으로 두면 허용 목록에 없는 낯선 통신은 모두 막힌다.
자세를 바꾸자 차이가 컸다. 기본 허용에서는 낯선 통신도 슬그머니 들어왔지만, 기본 차단으로 바꾸니 허용 목록에 적힌 것만 통과하고 나머지는 모두 막혔어요. 미처 생각하지 못한 통신까지 저절로 닫히는 것이 기본 차단의 힘이다.
불편함은 있다. 새 프로그램이 문을 써야 할 때마다 허용 규칙을 하나씩 더해 줘야 하기 때문이다. 그래도 그 번거로움이 모르는 구멍보다 훨씬 싸요. 그렇다면 문은 적게 열수록 더 안전할까?
열린 문이 적을수록 안전하다
밖에서 닿을 수 있는 지점을 모두 합친 것을 공격면이라고 한다. 열린 문 하나하나가 그런 지점이고, 문마다 그 뒤에서 돌아가는 프로그램이 있어요. 프로그램에 아직 알려지지 않은 결함이 있으면 그 문이 들어오는 길이 될 수 있다.
그래서 열린 문이 많을수록 공격면이 넓어지고, 꼭 필요한 문만 남기고 나머지를 닫으면 좁아진다. 쓰지도 않는 문을 열어 둘 까닭은 없다. 안 쓰는 문을 닫는 것만으로도 노출이 크게 줄고, 작은 면이 지키기도 쉬워요.
열린 문을 하나씩 눌러 닫아 보자. 열린 문이 줄수록 공격면 막대가 짧아진다.
문을 하나 닫을 때마다 공격면 막대가 짧아졌다. 열린 문이 많을 때는 노출이 넓었고, 꼭 필요한 문만 남기자 확 줄었어요. 공격면을 줄인다는 말이 바로 이 뜻이다.
물론 필요한 문까지 닫으면 일이 안 되니 쓸 문은 열어 둬야 한다. 그리고 방화벽은 열어 둔 문으로 들어오는 것까지 막지는 못한다. 웹 문으로 온 악성 파일이나, 안에 있는 사람이 직접 연 링크는 규칙상 허용된 통신이기 때문이에요. 쓸 것은 열고 안 쓸 것은 닫되, 문만으로 다 지킬 수는 없다는 것까지 기억해 두자.
정리
한데 모으면 이렇다. 방화벽은 드나드는 통신을 규칙으로 검문하는 파수꾼이다. 통신은 포트라는 문으로 드나들고, 방화벽은 출발지와 도착지, 문 번호를 보고 허용할지 차단할지 정해 둔 규칙에 맞춰 본다. 안에서 시작한 연결의 응답은 기억해 두었다가 들여보내요.
기본은 모르는 것은 막는 기본 차단이고, 허용한 것만 통과한다. 열린 문이 적을수록 공격면이 좁아져 더 안전해요. 다만 허용한 문으로 들어오는 것과 사람이 직접 연 것은 방화벽의 몫이 아니다.
핵심 네 가지를 차례로 눌러 되짚는다. 문 지키기, 허용과 차단 규칙, 기본은 차단, 공격면 줄이기의 순서예요.
이제 방화벽이 무엇을 하는지 알게 됐다. 문을 지키고 규칙으로 검문하며, 모르는 것은 막고 안 쓰는 문은 닫는 파수꾼이다. 그런데 이 파수꾼은 겉봉을 볼 뿐, 안에 있는 사람이 스스로 문을 열어 주는 것까지 막지는 못해요.
그래서 공격자는 문을 부수는 대신 사람을 속여 문을 열게 만들기도 한다. 다음 강에서는 기술이 아니라 사람의 마음을 노리는 이런 공격, 사회공학을 본다.