Improving Host Security with System Call Policies

2015. 11. 27. 14:29Security ★ Development/Paper

반응형

<Improving Host Security with System Call Policies>


 이 논문은 침입탐지, 감사, 권한 상승에 대한 기능을 가진 'Systrace'를 디자인하고 분석합니다.  

 컴퓨터 보안은 비지니스가 인터넷으로 수행됨에 따라 점점 더 중요성이 증가하고 있습니다.  Host pc의 보안이 중요시된다는 건데 host pc의 보안에서는 다양한 방법들이 있겠지만 여기서는 먼저 중요 명령 실행 루트인 system call을 모니터링하고 제한함으로서 애플리케이션이 피해를 끼치는 것을 막을 수 있다는 것을 보이고 있습니다.  Systrace는 효율적으로 여러 애플리케이션을 제한하고 다양한 정책을 지원하며 상호적인 정책 생성, 침입 탐지 및 방지 그리고 감사로그를 생성하는데 사용될 수 있습니다.  Systrace의 구현과 디자인에 대해 볼 것이며 호스트 보안 문제에 유용한 솔루션이라는 것을 보여줄 것입니다.  


1 Related Work

 전통적인 Unix 접근 모델을 확장한 접근 통제 리스트는 좋은 제어권을 부여하지만 신뢰되지 않은 애플리케이션이 피해를 입히는 것을 막을 수는 없습니다.  반면 Systrace는 시스템 콜 중재 및 가로채기에 기반한 메커니즘으로 성공적인 침투로부터 피해를 입는 것을 예방할 수 있습니다.  


2 Motivation and Threat Model

 Systrace는 공격자가 시스템에 가져올 수 있는 영향을 제한합니다.  이 때 애플리케이션이 실행하도록 허락된 operations을 제한하는 방법을 사용합니다.  

 공격자가 그들의 권한을 setuid나 setgid를 통해 올릴 수 있습니다.  setuid, setgid와 같은 프로그램은 유저 권한과 다른 권한을 가진 시스템을 작동시킴으로서 동작합니다.  비록 권한을 오릴는 것이 정확한 작동을 위해 필수적이라도 setuid 모델은 매우 조잡하다고 합니다.  앞으로 setuid binaries가 필요없는 모델을 볼 것이며 권한을 상승시키기 위한 방법을 policy language로 통합할 것입니다.  Systrace는 이러한 목적을 실현하고 공격자가 애플리케이션 취약점을 이용한 피해를 제한하는 호스트 보안의 향상에 효과적입니다.


3 Design

 System call 차단은 정책 결정이 만들어진 시간과 시스템 콜이 실행된 시간 사이에서 원자성을 제공하지 않습니다.  결국 공격자는 시스템 콜이 실행되기 전, 정책 데몬이 이것을 검사한 후에 시스템 콜을 변경할 수 있습니다.  

 이는 Systrace에 의해 평가된 인자로 시스템 콜 인자를 바꿈으로서 예방할 수 있습니다.


3.1 Policy

 정책 결정을 하기 위한 편존하는 프레임워크는 일반적인 정책 언어를 제안하고 정책 결정 방법을 제공하지만 Systrace의 그것보다 복잡합니다.  Systrace는 Systrace만의 정책 언어와 평가자를 만들었습니다.


3.2 Policy Generation

 오직 시스템 콜 이름의 연속성을 분석하는 침입 탐지 시스템과 다르게 Systrace의 정책 statements는 시스템 콜의 완전한 문맥을 확인합니다.  이를 통해 우회 공격을 회피할 수 있습니다.  

 정책 결정이 유저에 의해 될 필요가 있을 때 관련된 모든 정보를 포함한 GUI가 나타납니다. 

 현재 시스템 콜을 다루고 애플리케이션을 종료하고 현재 시스템 콜 호출을 허락하거나 거부하는 것을 결정하는 정책 statement를 추가함으로서 정책을 향상시킬 수 있습니다.


3.3 Privilege Elevation

 권한 상승에 대한 바탕은 최소 권한 원칙에 있습니다.  모든 프로그램과 유저는 어떤 일을 완수하기 위해 최소한의 필수적인 권한만 가져야 한다는 것이죠.  

 Systrace는 프로그램을 낮은 권한의 프로세스 컨텍스트 상에서 실행한 후에 유저나 커널이 특정한 시스템 콜이 실행되기 전에 권한을 올립니다.  그 후에는 다시 내립니다.


4. Implementation

 시스템 콜 차단 아키텍쳐의 개념적인 오버뷰는 다음 그림과 같습니다.

모니터링 되는 애플리케이션이 시스템 콜을 요구하면 커널을 in-kernel 정책 데이터베이스에 시스템 콜이 실행되어야 하는지 물어봅니다.  유저 공간 데몬에 물어보기 전에요.  in-kernel에서 알 수 없으면 userland에서, 그래도 안되면 GUI를 통해 유저에게 물어봅니다.

 번역기는 인자 정규화로 작동합니다.  인자 대체 프레임워크는 원래의 인자를 번역한 후의 것으로 대체합니다.  커널이 오직 정규화된 인자를 보기 때문에 공격자는 잘못된 인자를 보안 정책을 피하기 위해 사용할 수 없습니다.

 게다가 정규화된 파일명의 컴포넌트는 심볼릭 링크를 포함하지 않기 때문에 프로세스가 심볼릭 링크를 따라가는 것을 막을 수 있습니다.


5. Analysis

 샌드박스된 애플리케이션의 제어를 탈취한 공격자는 정책 강제 툴을 혼란시키고 정책을 어기는 행동을 허락하도록 속임으로서 샌드박스를 벗어나려고 할 것입니다.  대부분의 많은 샌드박싱 툴들이 같은 문제를 가지고 있지만 여기서는 새로운 솔루션을 제공하고 시스템 콜 중재에 기초한 정책 시스템의 상속 제한에 대해 알아볼 것입니다.


5.1 Security Analysis

 샌드박싱 툴은 정책 결정을 하기 위해 반드시 운영 시스템 상태를 따라야 합니다.  예를 들면 Systrace는 프로세스 uid나 모니터링 되는 프로세스가 실행하고 있는 프로그램 바이너리의 파일명을 추적합니다.  부정확하게 복제된 OS 문맥을 회피하기 위해 Systrace의 커널 레벨 구현은 Systrace 데몬에게 모든 관련된 상태 변화를 알립니다.   


5.2 Policy generation

 Systrace는 애플리케이션을 실행하고 기본적인 행동을 기록함으로써 자동으로 정책들을 생성 할 수 있습니다.  현존하는 정책에 속하지 않는 시스템 콜이 나타날 때마다 현재 번역된 시스템 콜과 맞는 새 정책 statement를 추가하게 됩니다.


정책에 대한 분석은 애플리케이션들이 보통 71개의 시스템 콜을 하게 된다고 합니다.  유닉스 시스템은 몇 백개의 시스템 콜을 지원합니다.  공격자가 애플리케이션에 대한 제어권을 얻었을 때 가능한 모든 시스템 콜을 통해 더 높은 권한을 얻으려고 할 것입니다.  이 때 애플리케이션이 요구하는 시스템 콜에 제한시키면 잠재적인 피해를 줄일 수 있습니다.


5.3 Intrusion Detection and Prevention

 침입 탐지와 방지 기술은 지금까지 본 디자인들에서 볼 수 있습니다.  정책을 위반하는 시스템 콜들은 운영 체제에 의해 거절되거나 기록됩니다.  이는 공격자가 대미지를 입히는 것을 예방하고 제한된 동작을 포함하는 경고(정책)를 생성합니다.  


5.4 Limitations

 시스템 콜들의 연속성을 모니터링하는 것만으로는 애플리케이션의 내부 상태에 대한 완전한 정보를 얻을 수 없습니다.


6. Performance

 다음 표는 Systrace를 마이크로벤치마크한 결과입니다.

 In-kernel과 User space의 차이는 컨텍스트 스위칭의 차이입니다.  호스트 기반 소프트웨어의 경우 해당 소프트웨어가 사용자가 실행하는 메인 프로그램이 아닐 경우 성능 문제가 더욱 민감하게 따라오죠.  호스트 기반 망 모니터링&방화벽과 같은 프로젝트를 했다가 얻은 교훈이 많았습니다.  


 이 논문은 자동적이고 상호적인 정책 생성, 감사, 침입 탐지 및 권한 상승, 그리고 시스템 서비스와 유저 애플리케이션에 적용되는 애플리케이션 제한에 대한 접근 방법을 보여줬습니다.  국내에서는 보안 필드에서도 루트킷 분야에 대해서는 거의 언급이 안 되는 것 같은데 랜섬웨어와 같이 한번 걸리면 뾰족한 방법이 없는 심각한 공격들에 대해서는 웹보안이나 사용자의 주의를 권하는 대책 뿐만 아니라 루트킷과 더불어 이러한 호스트 pc 기반의 보안에 대해서도 많이 연구해나가야 할 것 같습니다.