보안 솔루션의 적용 방식
정보자산에 대한 보안솔루션의 적용 방식은 Gateway(+Proxy), Sniffing, Agent, LKM, PAM 방식 등이 있다.
■ Gateway(+Proxy) 방식
Gateway(+Proxy) 방식은 접속하기 위한 통로를 별도로 설치한 후 사용자가 해당 통로를 통해서만 접근하도록 하는 방식이다. 예를 들어, 자동차를 타고 고속도로에 진입하기 위해서 반드시 톨게이트를 거쳐 통행료 징수를 위한 체크를 하듯이 서버나 네트워크, DB에 접속, 로그인하거나 로그인 한 후에 프로세스를 수행하기 위해서는 반드시 Gateway를 거치도록 구성하여 모든 로그인과 철저하게 통제하는 방식이다.
중앙집중식으로 중앙화 되어 있는 Gateway(+Proxy) 방식은 별도의 서버(안전성을 위해 이중화 구성 필요)를 설치한 후에 독립적인 IP 및 포트를 부여하고, 접속 시 해당 IP 및 포트로 로그인 하도록 한다.
분명한 것은 서버접근제어 기능 측면에서 서버보안S/W(Agent, LKM, PAM)가 Gateway(+Proxy, 별도의 보안서버) 방식에 비해 훨씬 기술적인 장점이 많다는 점이다.
물론 네트워크 관점에서 바라볼 때 서버 접근제어 시스템을 구축하는 것은 Gateway (+Proxy) 방식이 훨씬 쉽다는 장점이 있다.
왜냐하면, 중앙집중식으로 중앙화 되어 있는 Gateway (+Proxy) 방식은 서버보안S/W와 달리 서버마다 무언가를 설치하지 않아도 되기 때문이다.
하지만 논리적인 망구성의 변경이나 우회경로가 쉽게 뚫릴 수 있다는 점 그리고 자칫 Gateway (+Proxy) 서버의 접근 계정이 유출되면 더 큰 문제가 발생할 수 있다는 점 게다가 Gateway (+Proxy) 서버의 장애 발생 시 전체서버에 접근이 불가능해지고 사용자들이 서버에 접근하기가 많이 불편해지는 점 등 네트워크 기반에서 서버접근제어를 바라볼 때문에 발생할 수 있는 문제점에 대해 신중하게 검토하여야 한다.
중앙집중식으로 중앙화 되어 있는 별도의 서버 방식인 Gateway(+Proxy) 방식을 사용하는 것은 해커들이 너무도 좋아하는 우회/원격 접속, 중간자 공격이 가능한 솔루션으로 보안 전문가들은 이런 분류의 솔루션은 보안 솔루션으로 취급하지도 않는다.
■ Sniffing 방식
Sniffing 방식은 사용자와 서버 간에 주고받는 패킷을 복사하여 서버에 전달하는 방식이다. 이것은 마치 고속도로 상의 감시 카메라가 지나가는 자동차의 속도를 측정하여 과속 차량이 발생하는 경우에만 사진을 찍어 과태료를 부과하므로 전혀 교통 흐름에 영향을 주지 않는 것과 같은 방식이다. 따라서 조직에 가장 필요한 솔루션을 설치하면 된다. 남들이 이것 설치했다고 좋은게 아니고 반드시 임베디드 테스트나 사전 도입 검토를 충분히 거쳐야한다. 보안솔루션은 한번 설치되면 빼내기 무척 어렵고 제 기능 발휘하지 못해도 그대로 방치하는 경우가 발생할 수도 있다.
■ Agent 방식
Agent 방식은 서버에 접근제어를 설치하는 방식이다. 솔루션에 따라서 Agent만으로 접근이 가능하도록 설계되거나 어떤 솔루션은 별도로 외부에 서버를 설치한 후에 내부 패킷을 외부 서버로 전송하여 접근을 제어하기도 한다.
■ LKM 방식
LKM(Loadable Kernel Module) 방식은 커널 재컴파일 없이 작동중인 운영 체제 커널에 실행 기능을 모듈로 추가하기 위한 기법이다.
LKM은 현재 리눅스, 솔라리스, FreeBSD를 포함한 많은 운영체제에서 사용되고 있다.
트로이목마에 감염된 모듈이 LKM에 있으면 시스템을 리부팅 한다해도 부팅 과정에서 다른 커널 모듈들과 마찬가지로 감염된 LKM 모듈을 다시 적재하게 된다.
따라서 LKM 사용상의 이점이 널리 인정된다 하더라도 악의적인 침입자들에 의해 악용할 수도 있기 때문에 기능 자체를 반대하는 사람들도 있다.
일명 단편화 페널티가 있다. 베이스 커널은 항상 자신의 설치 루틴들에 의해 실제 인접한 메모리에 언팩되어 있다. 그래서 베이스 커널은 절대 단편화되지 않는다. 만약 모듈들이 삽입되면 새로운 커널 코드 삽입은 커널을 단편화시킬 수 있고 이것은 작은 성능 페널티를 유발할 수 있다.
리눅스는 커널 모듈들을 위한 안정적인 API나 ABI를 제공하지 않는다. 이것은 다른 커널 버전에서 다른 내부 구조가 존재한다는 것이고 호환성 문제를 유발한다.
적재 가능 커널 모듈이 실행중인 커널을 수정하는 편리한 방식인 반면에 이것은 공격자에 의해 남용될 수 있다. 많은 루트킷들이 자신의 방식으로 LKM을 사용한다. LKM을 적재할 때 확장된 권한을 요구함으로써 대부분의 운영 체제 모듈들은 어떠한 방식으로도 권한 확대를 돕지 않는다는 점을 주의 해야 한다.
리눅스는 sysctl 옵션 /proc/sys/kernel/modules_disabled을 통해 모듈 적재를 비활성화 한다. initramfs 시스템은 부팅에 요구되는 특정한 모듈들을 로드하고 이후에는 모듈 로딩을 비활성화시킨다. 이것은 보안을 모놀리딕 커널과 매우 유사하게 만들어 준다. 만약 공격자가 initramfs를 변경할 수 있다면, 그들은 커널 바이너리를 변경할 수 있게 된다.
전형적인 서버 접근제어에 사용한 방식으로 Secure OS가 이 방식을 채택하여 사용하고 있다.
■ PAM 방식
PAM(Pluggable Authentication Module) 방식은 Linux/Unix 시스템에서 중앙집중적인 인증 매커니즘을 지원하는 방식이다.
PAM의 기본 원리는 응용 프로그램이 password 파일을 읽어 오는 대신 PAM이 직접 인증을 수행 하도록 하는 것이다. PAM은 시스템 관리자가 원하는 인증 매커니즘이 무엇이든 상관하지 않는다.
PAM은 Windows 환경의 DDL(Dynamic Link Library)과 같은 것이다. Library로 프로그램이 어떤 사용자에 대한 인증을 수행하려면 PAM Library가 있는 함수를 호출한다. PAM은 해당 함수의 Library를 제공하여 응용 프로그램이 특정 사용자를 인증하도록 요청할 수 있다.
PAM을 통해 /etc/passwd 파일이나 /etc/shadow 파일을 확인하거나 또는 보다 복잡한 확인 작업을 수행하기도 하는데, 예로는 LDAP 서버에 접속하는 것이다.
확인 작업을 마치고, 인증 여부를 결정하게 되면 "인증됨/인증되지 않음"의 메시지를 자신을 호출한 응용 프로그램에 전송한다.
PAM을 사용하면 사용자 인증을 위한 시스템 항목 서비스(예: ftp, login, telnet, rsh) 사용을 구성할 수 있다. PAM이 제공하는 몇 가지 이점은 다음과 같다.
■ 유연한 구성 정책
■ 응용 프로그램별 인증 정책
■ 기본 인증 방식을 선택할 수 있는 기능
■ 높은 보안 시스템에서 여러 권한 부여를 요구할 수 있는 기능
■ 최종 사용자의 사용 편의성
■ 암호가 여러 인증 서비스에 대해 동일한 경우 암호 재입력 없음
■ 사용자가 여러 명령을 입력할 필요 없이 여러 인증 서비스에 대해 사용자에게 암호를 요구할 수 있는 기능
■ 사용자 인증 서비스에 선택적 옵션을 전달할 수 있는 기능
■ 시스템 항목 서비스를 변경할 필요 없이 사이트별 보안 정책을 구현할 수 있는 기능
보안 솔루션은 내가 접속하고자 하는 장비에 설치가 되어야 하며, 접속하고자 하는 장비에서 인증을 해야 한다.
현재 정보자산(H/W, S/W)에 대한 보안은 반대로 되어 있다.
예를 들어, 아파트를 출입하는 1층에 Lock이 있고, 실제 집의 출입문에는 Lock이 없는 구조로 되어 있다.
이 구조로는 도둑이 1층 출입문만 통과하면 실제 집의 출입문에는 열러 있는 구조라 얼마든지 이집 저집 다니면서 생명과 재산에 피해를 볼 수 밖에 없다.
생명과 재산을 그나마 보호 받을려면 1층 출입문 뿐만 아니라 각 집마다 Lock를 해야 한다.
제로 트러스트(Zero Trust)는 말 그대로 신뢰가 없다, 즉 '아무도 믿지 마라'라는 뜻이다. 기본적인 컨셉은 사용자, 단말기가 네트워크나 데이터에 접근을 요청할 때 처음부터 아무것도 신뢰하지 않는 보안 전략이다. 앞서 전통적인 보안 시스템에서는 성문, 관문이라 불리는 보안 시스템을 통과해서 IT 시스템에 들어오게 되면 해당 사용자나 단말기는 보안 시스템을 통과했기 때문에 신뢰하는 사용자, 단말기로 인식을 하게 된다. 하지만 제로 트러스트의 개념에서는 보안 시스템을 통과해서 IT 시스템에 접속한 사용자나 단말기라도 신뢰하지 않는다는 것이 기본 전제이다.
제로 트러스트 개념에서는 IT 시스템에 접근을 하기 위해서, 즉 접근 허가를 받기 위해서 먼저 사용자가 누구인지, 혹은 단말기가 안전한 허가를 받은 단말기인지, 그리고 어떤 접근 권한을 갖고 있는지 등 모든 유효성을 다 입증한 다음에 권한을 받아서 접근 허가를 수락하게 된다. IT 시스템에 접근하기 위해서만도 아니고 IT 시스템에 접속한 이후에 IT 시스템 안에서도 여러 시스템들이 존재하는데 각 시스템에 접근할 때마다 앞서 언급한 모든 유효성을 다 입증해야 한다. IT 시스템 안에 존재하는 데이터를 사용할 때도 마찬가지다. 즉, IT 시스템에 들어왔다고 하더라도 그것으로 끝나는 것이 아니라는 얘기다.
과거 강력한 보안시스템을 자랑하는 글로벌 기업들조차 내부 직원들의 계정 관리 허점을 타고 들어오는 공격에 속수무책으로 당하면서다.
제로트러스트(Zero trust)는 아주 믿을만한 직원의 계정이라도 시스템마다 접근 권한을 달리 부여하고, 실제 접근이 이뤄질 때마다 상대를 검증하는 보안 모델로 날로 지능화된 사이버 공격에 대응하기 위한 최적의 보안 대책으로 꼽히고 있다.
제로트러스트는 간편성과 편리성을 내세워 적용하기 쉽지만 보안이 느슨한 Gateway(+Proxy) 방식인 통합접근제어/통합계정관리/통합인증 방식과 반대 개념의 보안 모델이다.
"아무 것도 신뢰하지 않는다" = "아무도 믿지 마라" = "계속 검증하라"
결론은 간편성과 편리성만 내세우면 보안은 그만큼 허술하며, 이로 인한 댓가는 매우 혹독할 것이다.