Kevin Fenzi (kevin@tummy.com)
Dave Wreski (dave@nic.com)
v1.1.0 2000년 3월 8일
장범수 bschang@kldp.org
2000년 5월 9일
-----------------------------------------------------------------------------------
이 문서는 Linux System 관리자가 상대하게 되는 보안 이슈에 대한 일반적 개론을 밝힌다. 일반적인 보안 철학 등과 Linux System을 침입자로부터 보호할 방법 등의 특정 보기를 몇 가지 적어 놓았다. 보안에 관계된 자료들과 Program을 구할 수 있는 곳도 적어 놓았다. 개선 사항, 건설적인 비평, 첨가 사안, 그리고 수정안 등을 감사한 마음으로 수용하겠다. 여러분의 의견은 두 저자 모두에게 "Security HOWTO"를 Mail의 제목에 써서 보내 주기 바란다
-----------------------------------------------------------------------------------
2. 개요
이 문서에서는 Linux System의 보안을 위해서 쓰는 몇 가지 절차와 자주 쓰이는 Software들을 설명하겠다. 시작에 앞서서 기본 개념을 논의하고 보안에 대한 기본적 토대를 만드는 것이 중요할 것이다.
2.1 왜 보안이 필요한가?
항시 변화하는 Global Data Communication의 세계에서, 그리고 값 싼 Internet 연결이 가능한 현재에서, 또한 빠르게 움직이는 Software 개발에 있어서, 보안은 갈수록 중요한 문제로 떠오르고 있다. Computer라는 것이 개발 초기부터 보안을 염두를 두고 만든 것은 아니었기에, 보안은 근래에 와서야 기본적 필요조건으로 등장하게 되었다. 나쁜 보기를 들자면, Internet 상에서 한 Data가 A 지점에서 B 지점으로 흐르는 중간의 여러 다른 지점에서, 다른 사용자들이 Data를 가로채거나 심지어 변경해 버릴 수 있는 기회를 갖게 된다. 심지어 여러분의 System에 있는 다른 사용자들이 여러분의 Data를 -- 여러분이 의도하지 않은 다른 어떤 것으로 -- 악의로서 변경할 수도 있을 것이다. "Cracker"라고도 불리는 침입자들에 의해서 여러분의 System이 무단 사용될 수도 있으며, 이들은 뛰어난 지식을 악용함으로써 여러분인 척 신분을 위장하거나, 정보를 훔치거나, 또는 여러분이 여러분 System을 사용하고자 함을 거부할 수 있다. 만약 아직도 "Hacker"와 "Cracker"의 차이점이 무엇인가 모른다면 Eric Raymond가 쓴 "Hacker가 되는 법"을 보기 바란다. [2 Hacker HOWTO 한글판]
2.2 얼마나 안전한 것이 안전한 것인가?
우선 마음에 새겨 두어야 할 것은 어떠한 System도 "완벽하게 안전"할 수 없다는 것이다. 여러분이 할 수 있는 최선의 방법은 여러분의 System에 침입하는 일을 가능한 어렵게 만드는 것뿐이다. 평균의 가정용 Linux 사용자로서는 Cracker에 대비하기 위해서 그리 많은 것이 필요하지 않다. 하지만 (은행, 통신 회사 등의) 위치가 노출된 잘 알려져 있는 Linux의 사용자들 은 보다 많은 작업을 해야 한다.
계산에 두어야 할 사항은 System의 보안을 강화하면 할수록 System을 쓰기에 불편하게 된다는 것이다. 여러분은 System을 사용해야 하는 사용자의 관점에서도 System을 봄으로서 보안성과 편의성에 대한 균형을 잡아야 할 것이다. 예로서, (보안의 입장을 고려해서) 여러분의 System에 Modem으로 접속해 들어오는 사용자 모두에게 Call Back Modem을 쓰도록 할 수도 있을 것이다. [3 Call Back Modem]
비록 이 방법을 쓰면 보안을 보다 강화할 수는 있겠지만, 사용자의 입장에서는 Log-In을 하기에 불편하게 만드는 것이 된다. 또는, Network이나 Internet에 아예 연결되지 않게 Linux System을 만들 수도 있겠지만, 이것은 유용성을 제한하게 되는 것일 것이다.
만약 중간 규모 이상의 대형 Site라면, 어떤 수준의 보안이 필요하고 이것을 점검하기 위해서는 어떤 절차 감사 (auditing: 監査)가 필요한 것인가를 밝히는 보안 수칙을 준비하는 것이 좋다. 보안 수칙의 예제는 이곳을 참고하면 될 것이다. 이 문서는 최근에 갱신되었으며, 여러분 회사의 보안 규칙을 성립함에 중요할 뼈대를 담고 있다. [4. 인터넷 문서] [[[delete this]]]
2.3 무엇을 보호할 것인가?
어떤 위험에 대비해야 할 것인가, 어떤 위험부담을 감수하거나 감수하지 않을 것인가, 그렇다면 결과적으로 System이 얼마나 취약하게 되는 것인가 등을 미리 생각해 놓는 것이 좋을 것이다. 무엇을 보호하는가, 왜 보호하는가, 이 보호 대상의 가치는 얼마나 되는가, 그리고 Data와 자산에 대해서 누가 책임을 질 것인가를 분석하자.
위험 요소 (risk)란 침입자가 System을 성공적으로 침입하는 경우를 암시한다. 여러분에게 중요한 파일을 침입자가 읽거나 쓰고, 심지어는 Program을 실행할 수 있는 가? 중요한 Data를 지울 수 있는가? 여러분이나 여러분의 회사가 중요한 업무를 실행하는 것을 훼방 놓을 수 있는가? 또한 여러분의 계정이나 System에 Access를 가지고 있는 사람이 여러분을 사칭할 수도 있다는 것을 잊지 말아야 한다.
또한, 보안이 취약한 계정 한 개 때문에 전체 Network가 침입을 당하는 결과가 생길 수도 있다. 설사 단 한 명의 사용자라 하더라도 Remote Host (rhost의 사용을 허락해 주거나, 혹은 tftp 등의 보안이 불완전한 Service의 사용을 허용함으로 침입자에게 "발 디딜 자리"를 주는 결과가 생기는 것이다. 침입자가 여러분 System이나 다른 System에 사용자 계정을 갖은 순간부터 이 계정은 다른 계정이나 다른 System으로의 Access를 얻는데 사용될 수 있다.
위험 요소 (threat)는 여러분 Network나 Computer에 불법 Access (unauthorized access)를 얻고자 하는 생각이 있는 사람으로부터 생성된다. 누구를 신임해서 여러분의 System에 Access를 허락할 것인가, 어느 정도의 위험부담을 그 사람이 발생시키는가 등을 잘 결정해야 한다.
침입자라는 집단은 여러 부류로 나뉘어지며, 보안 작업을 실행 할 때에는 그들 각 각의 특성을 염두에 두는 것이 좋다.
궁금증이 많은 사람 (The Curious): 이 종류의 침입자는 기본적으로 여러분이 어떤 System과 Data를 가지고 있는가 정도를 알고자 하는 것에 흥미를 둔다.
악의가 있는 사람 (The Malicious): 이 종류의 침입자는 여러분의 System을 다운시키거나 여러분의 Web 페이지를 손상시키거나, 손해를 복구하게 하는 등으로 여러분의 시간과 돈을 낭비하게 만든다.
명성을 얻으려는 사람 (The High-Profile Intruder): 이 종류의 침입자는 인기와 악명을 얻기 위해서 여러분의 System을 쓰려고 한다. 잘 알려진 System을 침투함으로써 자신의 능력을 선전하려고 하는 것이다.
경쟁자 (The Competition): 이 종류의 침입자는 여러분 System에 무슨 Data가 있는가에 흥미를 둔다. 돈이 될 만한 무엇을 여러분이 가지고 있다고 생각하는 불특정인 일 수도 있다.
도용자 (The Borrowers): 이 종류의 침입자는 그의 목적을 위해서 여러분 System을 무단 사용하면서 여러분의 System 자원을 훔치는 사람이다. 이들은 일반적으로 Chatting이나 IRC Server, Porno Archive Site 등을 여러분의 Computer에서 돌리고, 심지어는 DNS Server를 돌리기 까지 한다.
건너뛰기 도용자 (The Leapfrogged): 이 종류의 침입자는 다른 System으로 들어가기 위한 도구로서 여러분의 System을 이용하려고 한다. 만약 여러분의 System이 많은 수의 Host에 연결되어 있거나 Gateway로 사용되는 경우라면, 이런 류의 침입자가 여러분 System을 깨고 들어오려는 노력을 하는 것을 이미 보았을 수도 있을 것이다.
"취약성 (Vulnerability)"이 있다 함은 여러분의 Computer가 다른 Network로부터 보호가 되지 않거나, 누군가가 여러분 Computer에 불법 Access를 얻을 가능성이 있는 경우를 뜻한다.
여러분의 System에 누군가가 침입했다면 무엇이 상관된 문제일까? 물론 다이내믹 PPP를 사용하는 개인 사용자의 관심은 Internet이나 다른 큰 Network에 연결된 회사의 관심사와는 다르기는 하겠지만 말이다.
손상된 Data의 횟수와 복구에 얼마나 시간이 걸릴 것인가? 초기의 조그만 시간 투자는 잃어버린 Data를 회복하는데 낭비되는 시간의 십 분의 일도 안될 수 있다. 근래에 백업 전략을 점검하거나 백업된 Data를 확인한 적이 있는지?
2.4 보안 수칙의 완성
사용자들이 쉽게 이해하고 따를 수 있는 간단하고 일반적인 수칙을 만들도록 해야 한다. 수칙은 관리자 여러분이 수호하는 Data를 보호하는 동시에, 사용자의 프라이버시도 지키도록 만들어져야 한다. 숙고해야 할 것들은 누가 System에 Access를 가질 것인가 (친구들이 내 계정을 써도 될 것인가?), 누가 System에 Software를 설치하도록 허락될 것인가, 누가 어떤 Data를 소유할 것인가 등과, 재해 시의 복구 대책, System의 적절한 사용 등이다.
일반적으로 이용되고 있는 보안 수칙은 다음의 문장으로 시작된다:
허락되어 있지 않은 사항은 금지 사항으로 간주할 것.
이것은 System 관리자 여러분이 허락하지 않은 System Service를 일반 사용자가 사용을 하면 안 된다는 뜻이다. 이 수칙은 관리자 여러분의 일반 계정에 조차도 적용이 되도록 해야 할 것이다. "도대체 이것의 허가권은 귀찮구먼. 그냥 Root로 들어가서 해 버리지 뭐" 하는 따위는, 너무도 당연히 알려져 있는 침탈법에 사용됨은 물론이고 아직 발견조차 되지 않은 침탈법까지 발전 사용될 보안 개구멍을 열어 놓는 것과 다름없는 것이다.
rfc1244는 Network 보안 수칙을 만드는 방법을 설명해 주고 있다.
rfc1281은 보안 수칙의 예제를 각 단 계의 자세한 설명과 함께 설명해 주고 있다.
마지막으로, 여기에 있는 COAST Archive를 가보면, 실제 사용되고 있는 보안 수칙이 어떻게 만들어져 있는 볼 수 있다.
2.5 Site 보안의 방법
이 문서는 -- 기계, Data, 사용자, Network, 심지어는 여러분의 명성 등, 여러분이 열심히 일하면서 만들어 모은 -- "자산" 보호의 여러 방법에 대해서 논의한다. 만약에 일반 사용자의 Data를 침입자가 지워 버렸다면 여러분의 명성은 어떻게 될까? 여러분 Web Site의 내용이 바꿔져 버렸다면? 여러분 회사가 추진하고 있는 다음 분기의 Project를 침입자가 밝혀 버린다면? Network를 설치할 때는, 단 한 대의 Computer를 더하기 전에도 미리 생각해 두어야 하 는 여러 문제가 있기 마련이다.
여러분이 겨우 하나의 Dial-Up PPP 계정을 가지고 있거나 작은 Site 하나 만을 가지고 있다고 해서, 침입자가 여러분 System에 흥미를 안 가질 이유는 없다. 크고 이름 있는 Site들만이 침입 대상이라고 생각하면 안 된다. 많은 침입자들은 "크기에 상관없이 가능한 많은 Site를 침입한다"는 목적만으로 침탈을 시행한다. 덧붙여서, 여러분 Site의 보안 개구멍 (Security Hole) 을 사용해서 여러분이 연결되어 있는 다른 Site로 우회적인 Access를 할 수도 있는 것이다.
침입자들은 시간이 남아도는 사람들이며, 설령 여러분이 System을 구석에 꽁꽁 감추어 놓는다 해도, 모든 가능한 방법을 시도해 보는 방법 등으로 우회 침탈해서 여러분의 System에 들어올 수 있다. 침입자가 여러분의 System에 흥미를 가질 이유는 많다. 이에 대해서는 뒤에 좀 더 설명을 하겠다.
Host 보안
여러 보안 영역 중에서 관리자가 가장 집중적인 관심을 쏟는 부분은 아마도 Host 보안이 아닐까 한다. 여러분이 소유한 System이 안전하도록 철저한 관리를 하는 것과 Network의 다른 사람들도 같은 정도로 보안에 만전을 다하기를 바라는 것에서부터 시작을 해야 할 것이다. 좋은 Password를 고르는 것, 여러분 Host의 지역 Network Service에 대한 보안화 작업을 하는 것, 계정 사용일지를 잘 관리해서 만드는 것, 그리고 보안 개구멍이 있다고 알려진 Program을 갱신 교체하는 것 등이 지역 보안 관리자 (Local Security Administrator) 임무의 일부이다. 비록 이런 것들이 철저하게 필요한 일이기는 하지만, Network에 붙여지는 Computer 숫자가 불어나기 시작하면 이러한 작업들은 보안 관리자의 기세가 꺾일 정도의 많은 일이 되기도 한다.
Network 보안
지역 Host 보안처럼 Network 보안도 중요하다. 한 Network에 수 백 내지 수천의 Computer가 붙어 있는 상황에서, 하나 하나의 모든 System이 전부 보안화 작업이 되어 있다고 믿어서는 안 될 것이다. 정식 사용자만이 Network를 쓰도록 만들고, 방화벽을 만들고, 강력한 암호 기법을 쓰고, Network 상에 관리자 없는 주인 없는 기계 (Rogue Machine)따위의 안전관리가 안 되어 있는 기계가 없도록 하는 것 등이 모두 Network 관리자의 임무인 것이다. [5. 주인 없는 기계]
이 문서는 여러분의 Site에 대해서 보안화 작업을 실행하는 Technique을 논의할 것이며, 여러분이 보호하려고 하는 것을 침입자가 Access를 못하도록 하는 방지법 등을 보여주려 한다.
은둔 보안 방식 (Security through obscurity)
"구석에 숨는 식의 보안"은 반드시 논의되어야 하는 보안법의 하나이다. 한 예를 들자면, "보안 침탈법이 있다고 알려져 있는 Service의 Port를 비정규적인 Port로 이동해 놓으면 공격자가 당연히 이 것을 모를 것이므로 당연히 침탈해 들어오지 못할 것"이라는 따위의 생각이다. 이러한 속없는 보안법을 공격자가 어렵잖게 간파해 낼 것임을 믿어 의심치 말라. 이러한 "혼자만 알면서 쓰는 은둔 보안법"은 보안화 방법이 절대 아니다. 단지 여러분이 작은 Site를 가지고 있다 해서, 혹은 잘 알려져 있지 않다고 해서 여러분이 가지고 있는 것에 침입자가 흥미를 가지지 않을 것이라는 생각은 금물이다. 무엇을 보호하는 것인가는 다음 항목들에서 다루겠다.
2.6 이 문서의 구성
이 문서는 항목으로 구분해 놓았다. 각 항목은 여러 주제의 보안 이슈를 각각 다룬다. 첫째인 물리적 보안 항목은 기계에 직접 손을 대는 것을 막는 방법을 다룬다. 둘째인 지역 보안은 어떻게 System을 지역 사용자로부터 보호할 것인가를 다룬다. 셋째인 파일과 파일System 보안은 어떻게 파일System을 구성하고 파일의 허가권을 설정해 줄 것인가를 다룬다. Password 보안과 암호화는 암호화 기법을 사용해서 어떻게 여러분의 Computer와 Network를 보호할 것인가를 다룬다. Kernel 보안은 여러분이 어떤 Kernel Option은 설치해야 하고, 어떤 Option은 알아두어야 하는가를 논하겠다. Network 보안은 여러분의 Linux System을 Network 공격으로부터 어떻게 보호할 것인가를 다룬다. 온라인 전의 보안 준비는 System을 Web에 연결하기 전에 무엇을 준비해야 하는가를 다룬다. 그 다음은 System 침입이 목격되고 있는 상황이거나 지난 침입이 발견된 후에는 무엇을 할 것인가를 다룬다. 보안 관련 자료에서는 근본적인 보안 자료들을 열거하겠다. 마지막으로는 FAQ, 그리고 결론을 적겠다.
이 문서를 읽는 중에 염두에 둘 두 가지는:
여러분의 System을 파악해 둘 것. /var/log/messages 등의 System 일지 (log)를 확인하며, System에 주의를 두도록 하고,
둘째는 항상 현재 버전의 Software를 설치하도록 하며, 보안 경고가 나오는 데로 이에 맞게 갱신 설치를 하는 등으로 System을 최신의 상태로 유지하도록 할 것이다. 이렇게만 해도 System이 눈에 띄게 보안화 되는 것에 도움이 될 것이다.
'Operating System > Linux' 카테고리의 다른 글
| Linux Security How-To (Kernel Security) (0) | 2007/06/18 |
|---|---|
| Linux Security How-To (Password Security & Encryption) (0) | 2007/06/16 |
| Linux Security How-To (File & File System Security) (0) | 2007/06/16 |
| Linux Security How-To (지역보안) (0) | 2007/06/16 |
| Linux Security How-To (물리적 보안) (0) | 2007/06/16 |
| Linux Security How-To (개요) (0) | 2007/06/16 |
| Linux Security How-To (소개) (0) | 2007/06/16 |
| Linux Security How-To (색인) (0) | 2007/06/09 |
| 각 OS Version 및 정보 숨기는 법 (0) | 2007/06/05 |
| Apache에 SSL Module 추가 (0) | 2007/05/22 |
| 손에 잡히는 Linux Security ③ (0) | 2007/05/22 |