강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

2. 개요

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

2. 개요

이 문서에서는 리눅스 시스템의 보안을 위해서 쓰는 몇 가지 절차와 자주 쓰이는 소프트웨어들을 설명하겠다. 시작에 앞서서 기본 개념을 논의하고 보안에 대한 기본적 토대를 만드는 것이 중요할 것이다.

2.1 왜 보안이 필요한가?

항시 변화하는 글로벌 데이타 커뮤니케이션의 세계에서, 그리고 값 싼 인터넷 연결이 가능한 현재에서, 또한 빠르게 움직이는 소프트웨어 개발에 있어서, 보안은 갈수록 중요한 문제로 떠오르고 있다. 컴퓨터라는 것이 개발 초기부터 보안을 염두를 두고 만든 것은 아니었기에, 보안은 근래에 와서야 기본적 필요조건으로 등장하게 되었다. 나쁜 보기를 들자면, 인터넷 상에서 한 데이타가 A 지점에서 B 지점으로 흐르는 중간의 여러 다른 지점에서, 다른 사용자들이 데이타를 가로채거나 심지어 변경해 버릴 수 있는 기회를 갖게 된다. 심지어 여러분의 시스템에 있는 다른 사용자들이 여러분의 데이타를 -- 여러분이 의도하지 않은 다른 어떤 것으로 -- 악의로서 변경할 수도 있을 것이다. "크래커"라고도 불리는 침입자들에 의해서 여러분의 시스템이 무단 사용될 수도 있으며, 이들은 뛰어난 지식을 악용함으로서 여러분인 척 신분을 위장하거나, 정보를 훔치거나, 또는 여러분이 여러분 시스템을 사용하고자 함을 거부할 수 있다. 만약 아직도 "핵커"와 "크랙커"의 차이점이 무엇인가 모른다면 http://www.tuxedo.org/~esr/faqs/hacker-howto.html에서 에릭 레이몬드(Eric Raymond)가 쓴 "핵커가 되는 법"을 보기 바란다. [2 핵커 하우투 한글판]

2.2 얼마나 안전한 것이 안전한 것인가?

우선 마음에 새겨 두어야 할 것은 어떠한 시스템도 "완벽하게 안전"할 수 없다는 것이다. 여러분이 할 수 있는 최선의 방법은 여러분의 시스템에 침입하는 일을 가능한 어렵게 만드는 것뿐이다. 평균의 가정용 리눅스 사용자로서는 크랙커에 대비하기 위해서 그리 많은 것이 필요하지 않다. 하지만 (은행, 통신 회사 등의) 위치가 노출된 잘 알려져 있는 리눅스의 사용자들 은 보다 많은 작업을 해야 한다.

계산에 두어야 할 사항은 시스템의 보안을 강화하면 할수록 시스템을 쓰기에 불편하게 된다는 것이다. 여러분은 시스템을 사용해야 하는 사용자의 관점에서도 시스템을 봄으로서 보안성과 편의성에 대한 균형을 잡아야 할 것이다. 예로서, (보안의 입장을 고려해서) 여러분의 시스템에 모뎀으로 접속해 들어오는 사용자 모두에게 콜백 모뎀을 쓰도록 할 수도 있을 것이다. [3 콜백 모뎀]

비록 이 방법을 쓰면 보안을 보다 강화할 수는 있겠지만, 사용자의 입장에서는 로그인을 하기에 불편하게 만드는 것이 된다. 또는, 네트워크이나 인터넷에 아예 연결되지 않게 리눅스 시스템을 만들 수도 있겠지만, 이것은 유용성을 제한하게 되는 것일 것이다.

만약 중간 규모 이상의 대형 사이트라면, 어떤 수준의 보안이 필요하고 이것을 점검하기 위해서는 어떤 절차 감사 (auditing: 監査)가 필요한 것인가를 밝히는 보안 수칙을 준비하는 것이 좋다. 보안 수칙의 예제는 www.faqs.org/rfcs/rfc2196.html를 참고하면 될 것이다. 이 문서는 최근에 갱신되었으며, 여러분 회사의 보안 규칙을 성립함에 중요할 뼈대를 담고 있다. [4. 인터닉 문서] [[[delete this]]]

2.3 무엇을 보호할 것인가?

어떤 위험에 대비해야 할 것인가, 어떤 위험부담을 감수하거나 감수하지 않을 것인가, 그렇다면 결과적으로 시스템이 얼마나 취약하게 되는 것인가 등을 미리 생각해 놓는 것이 좋을 것이다. 무엇을 보호하는가, 왜 보호하는가, 이 보호 대상의 가치는 얼마나 되는가, 그리고 데이타와 자산에 대해서 누가 책임을 질 것인가를 분석하자.

  • 위험 요소 (risk)란 침입자가 시스템을 성공적으로 침입하는 경우를 암시한다. 여러분에게 중요한 파일을 침입자가 읽거나 쓰고, 심지어는 풀그림을 실행할 수 있는 가? 중요한 데이타를 지울 수 있는가? 여러분이나 여러분의 회사가 중요한 업무를 실행하는 것을 훼방놓을 수 있는가? 또한 여러분의 계정이나 시스템에 엑세스를 가지고 있는 사람이 여러분을 사칭할 수도 있다는 것을 잊지 말아야 한다.
  • 또한, 보안이 취약한 계정 한 개 때문에 전체 네트워크가 침입을 당하는 결과가 생길 수도 있다. 설사 단 한 명의 사용자라 하더라도 리모트 호스트 (rhost의 사용을 허락해 주거나, 혹은 tftp 등의 보안이 불완전한 서비스의 사용을 허용함으로 침입자에게 "발 디딜 자리"를 주는 결과가 생기는 것이다. 침입자가 여러분 시스템이나 다른 시스템에 사용자 계정을 갖은 순간부터 이 계정은 다른 계정이나 다른 시스템으로의 엑세스를 얻는데 사용될 수 있다.

  • 위험 요소 (threat)는 여러분 네트워크나 컴퓨터에 불법 엑세스 (unauthorized access)를 얻고자 하는 생각이 있는 사람으로부터 생성된다. 누구를 신임해서 여러분의 시스템에 엑세스를 허락할 것인가, 어느 정도의 위험부담을 그 사람이 발생시키는가 등을 잘 결정해야 한다.

    침입자라는 집단은 여러 부류로 나뉘어지며, 보안 작업을 실행 할 때에는 그들 각 각의 특성을 염두에 두는 것이 좋다.

    • 궁금증이 많은 사람 (The Curious): 이 종류의 침입자는 기본적으로 여러분이 어떤 시스템과 데이타를 가지고 있는가 정도를 알고자 하는 것에 흥미를 둔다.
    • 악의가 있는 사람 (The Malicious): 이 종류의 침입자는 여러분의 시스템을 다운시키거나 여러분의 웹 페이지를 손상시키거나, 손해를 복구하게 하는 등으로 여러분의 시간과 돈을 낭비하게 만든다.
    • 명성을 얻으려는 사람 (The High-Profile Intruder): 이 종류의 침입자는 인기와 악명을 얻기 위해서 여러분의 시스템을 쓰려고 한다. 잘 알려진 시스템을 침투함으로서 자신의 능력을 선전하려고 하는 것이다.
    • 경쟁자 (The Competition): 이 종류의 침입자는 여러분 시스템에 무슨 데이타가 있는가에 흥미를 둔다. 돈이 될 만한 무엇을 여러분이 가지고 있다고 생각하는 불특정인 일 수도 있다.
    • 도용자 (The Borrowers): 이 종류의 침입자는 그의 목적을 위해서 여러분 시스템을 무단 사용하면서 여러분의 시스템 자원을 훔치는 사람이다. 이들은 일반적으로 챗팅이나 IRC 서버, 포르노 아카이브 사이트 등을 여러분의 컴퓨터에서 돌리고, 심지어는 DNS 서버를 돌리기 까지 한다.
    • 건너뛰기 도용자 (The Leapfrogger): 이 종류의 침입자는 다른 시스템으로 들어가기 위한 도구로서 여러분의 시스템을 이용하려고 한다. 만약 여러분의 시스템이 많은 수의 호스트에 연결되어 있거나 게이트웨이로 사용되는 경우라면, 이런 류의 침입자가 여러분 시스템을 깨고 들어오려는 노력을 하는 것을 이미 보았을 수도 있을 것이다.

  • "취약성 (Vulnerability)"이 있다 함은 여러분의 컴퓨터가 다른 네트워크로부터 보호가 되지 않거나, 누군가가 여러분 컴퓨터에 불법 엑세스를 얻을 가능성이 있는 경우를 뜻한다.

    여러분의 시스템에 누군가가 침입했다면 무엇이 상관된 문제일까? 물론 다이내믹 PPP를 사용하는 개인 사용자의 관심은 인터넷이나 다른 큰 네트워크에 연결된 회사의 관심사와는 다르기는 하겠지만 말이다.

    손상된 데이타의 횟수와 복구에 얼마나 시간이 걸릴 것인가? 초기의 조그만 시간 투자는 잃어버린 데이타를 회복하는데 낭비되는 시간의 십분의 일도 안될 수 있다. 근래에 백업 전략을 점검하거나 백업된 데이타를 확인한 적이 있는지?

2.4 보안 수칙의 완성

사용자들이 쉽게 이해하고 따를 수 있는 간단하고 일반적인 수칙을 만들도록 해야 한다. 수칙은 관리자 여러분이 수호하는 데이타를 보호하는 동시에, 사용자의 프라이버시도 지키도록 만들어져야 한다. 숙고해야 할 것들은 누가 시스템에 엑세스를 가질 것인가 (친구들이 내 계정을 써도 될 것인가?), 누가 시스템에 소프트웨어를 설치하도록 허락될 것인가, 누가 어떤 데이타를 소유할 것인가 등과, 재해 시의 복구 대책, 시스템의 적절한 사용 등이다.

일반적으로 이용되고 있는 보안 수칙은 다음의 문장으로 시작된다:

허락되어 있지 않은 사항은 금지 사항으로 간주할 것.

이것은 시스템 관리자 여러분이 허락하지 않은 시스템 서비스를 일반 사용자가 사용을 하면 안된다는 뜻이다. 이 수칙은 관리자 여러분의 일반 계정에조차도 적용이 되도록 해야 할 것이다. "도대체 이것의 허가권은 귀찮구먼. 그냥 루트로 들어가서 해 버리지 뭐" 하는 따위는, 너무도 당연히 알려져 있는 침탈법에 사용됨은 물론이고 아직 발견조차 되지 않은 침탈법에로 까지 발전 사용될 보안 개구멍을 열어 놓는 것과 다름없는 것이다.

rfc1244는 네트워크 보안 수칙을 만드 는 방법을 설명해 주고 있다.

rfc1281은 보안 수칙의 예제를 각 단 계의 자세한 설명과 함께 설명해 주고 있다.

마지막으로, ftp://coast.cs.purdue.edu/pub/doc/policy에 있는 COAST 아카이브를 가보면, 실제 사용되고 있는 보안 수칙이 어떻게 만들어져 있는 볼 수 있다.

2.5 사이트 보안의 방법

이 문서는 -- 기계, 데이타, 사용자, 네트워크, 심지어는 여러분의 명성 등, 여러분이 열심히 일하면서 만들어 모은 -- "자산" 보호의 여러 방법에 대해서 논의한다. 만약에 일반 사용자의 데이타를 침입자가 지워 버렸다면 여러분의 명성은 어떻게 될까? 여러분 웹 사이트의 내용이 바꿔져 버렸다면? 여러분 회사가 추진하고 있는 다음 분기의 프로젝트를 침입자가 밝혀 버린다면? 네트워크를 설치할 때는, 단 한 대의 컴퓨터를 더하기 전에도 미리 생각해 두어야 하 는 여러 문제가 있기 마련이다.

여러분이 겨우 하나의 다이알업 PPP 계정을 가지고 있거나 작은 사이트 하나 만을 가지고 있다고 해서, 침입자가 여러분 시스템에 흥미를 안 가질 이유는 없다. 크고 이름 있는 사이트들만이 침입 대상이라고 생각하면 안된다. 많은 침입자들은 "크기에 상관없이 가능한 많은 사이트를 침입한다"는 목적만으로 침탈을 시행한다. 덧붙여서, 여러분 사이트의 보안 개구멍 (Security hole) 을 사용해서 여러분이 연결되어 있는 다른 사이트로 우회적인 엑세스를 할 수도 있는 것이다.

침입자들은 시간이 남아도는 사람들이며, 설령 여러분이 시스템을 구석에 꽁꽁 감추어 놓는다 해도, 모든 가능한 방법을 시도해 보는 방법 등으로 우회 침탈해서 여러분의 시스템에 들어올 수 있다. 침입자가 여러분의 시스템에 흥미를 가질 이유는 많다. 이에 대해서는 뒤에 좀 더 설명을 하겠다.

호스트 보안

여러 보안 영역 중에서 관리자가 가장 집중적인 관심을 쏟는 부분은 아마도 호스트 보안이 아닐까 한다. 여러분이 소유한 시스템이 안전하도록 철저한 관리를 하는 것과 네트워크의 다른 사람들도 같은 정도로 보안에 만전을 다하기를 바라는 것에서부터 시작을 해야 할 것이다. 좋은 패스워드를 고르는 것, 여러분 호스트의 지역 네트워크 서비스에 대한 보안화 작업을 하는 것, 계정 사용일지를 잘 관리해서 만드는 것, 그리고 보안 개구멍이 있다고 알려진 풀그림을 갱신 교체하는 것 등이 지역 보안 관리자 (local security administrator) 임무의 일부이다. 비록 이런 것들이 철저하게 필요한 일이기는 하지만, 네트워크에 붙여지는 컴퓨터 숫자가 불어나기 시작하면 이러한 작업들은 보안 관리자의 기세가 꺾일 정도의 많은 일이 되기도 한다.

네트워크 보안

지역 호스트 보안처럼 네트워크 보안도 중요하다. 한 네트워크에 수 백 내지 수천의 컴퓨터가 붙어 있는 상황에서, 하나 하나의 모든 시스템이 전부 보안화 작업이 되어 있다고 믿어서는 안 될 것이다. 정식 사용자만이 네트워크를 쓰도록 만들고, 방화벽을 만들고, 강력한 암호 기법을 쓰고, 네트워크 상에 관리자 없는 주인 없는 기계 (rogue machine)따위의 안전관리가 안 되어 있는 기계가 없도록 하는 것 등이 모두 네트워크 관리자의 임무인 것이다. [5. 주인 없는 기계]

이 문서는 여러분의 사이트에 대해서 보안화 작업을 실행하는 테크닉을 논의할 것이며, 여러분이 보호하려고 하는 것을 침입자가 엑세스를 못하도록 하는 방지법 등을 보여주려 한다.

은둔 보안 방식 (Security through obscurity)

"구석에 숨는 식의 보안"은 반드시 논의되어야 하는 보안법의 하나이다. 한 예를 들자면, "보안 침탈법이 있다고 알려져 있는 서비스의 포트를 비정규적인 포트로 이동해 놓으면 공격자가 당연히 이 것을 모를 것이므로 당연히 침탈해 들어오지 못할 것"이라는 따위의 생각이다. 이러한 속없는 보안법을 공격자가 어렵잖게 간파해 낼 것임을 믿어 의심치 말라. 이러한 "혼자만 알면서 쓰는 은둔 보안법"은 보안화 방법이 절대 아니다. 단지 여러분이 작은 사이트를 가지고 있다 해서, 혹은 잘 알려져 있지 않다고 해서 여러분이 가지고 있는 것에 침입자가 흥미 를 가지지 않을 것이라는 생각은 금물이다. 무엇을 보호하는 것인가는 다음 항목들에서 다루겠다.

2.6 이 문서의 구성

이 문서는 항목으로 구분해 놓았다. 각 항목은 여러 주제의 보안 이슈를 각각 다룬다. 첫째인 물리적 보안 항목은 기계에 직접 손을 대는 것을 막는 방법을 다룬다. 둘째인 지역 보안은 어떻게 시스템을 지역 사용자로부터 보호할 것인가를 다룬다. 셋째인 파일과 파일시스템 보안은 어떻게 파일시스템을 구성하고 파일의 허가권을 설정해 줄 것인가를 다룬다.

다른 사람들에게 적절한 엑세스 권한을 제공하려 할 때, 염두에 두면 좋을 경험적인 법칙들이 있다.

  • 사용자들에게 필요로 하는 최소의 권한만을 준다.
  • 사용자들이 언제/어디서 로그인하는지 혹은 로그인해야 하는지 알아야 한다.
  • 폐쇄되었거나 사용이 되지 않고 있는 계정은 지운다.
  • 개개인의 사용자는 네트워크 전반의 모든 컴퓨터에 대해서 동일한 유저아이디 (userid)를 유지하면서 사용하도록 하는 것이 좋다. 일지 기록을 분석할 때와 개인 계정 관리를 할 때 편하기 때문이다.
  • 그룹 유저아이디 (userid)를 만드는 것은 철저하게 금지되어야 한다. 사용자의 개인 계정만 사용하게 한다면 사용자의 사용 책임 인과가 분명하게 되지만, 그룹 계정을 쓴 경우에는 책임 인과의 분명성을 구성하기가 불가능하다.

여러 달이나 여러 해 이상 사용되지 않고 있는 지역 사용자 계정은 종종 침입의 도구로 사용된다. 아무도 사용하고 있지 않기 때문에 이런 계정들은 최상의 공격 도구가 된다. [37. 휴면 계정]

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,045 명
  • 현재 강좌수 :  35,861 개
  • 현재 접속자 :  67 명