Shell script compiler로 쉘 스크립트 소스보호하기

이전의 Post에서 암호화에 대한 글을 쓰면서 대칭키암호화 방식에서 쓰이는 일종의 열쇠인 "보안키(비밀키)"의 저장에 대해서 고민해 봤습니다. 국내 모 기업의 DB암호화 솔루션 등의 개념을 교육받으면서 이런 보안비밀키의 요청에대해 자체적으로 정책서버라는 인증도구를 사용하는 것과 그냥 단순 텍스트 파일로 저장하는 것과는 분명 차이는 있겠습니다만, 어쨋든 Local에서 정책서버가 구동되어 인증해 주던, 단순 텍스트파일에 보안비밀키를 두던 시스템의 모든 권한이 넘어가는 보안사고가 나면 무슨의미가 있을까? 하는 생각을 하게 된거죠.

어쨋든 시스템의 모든 권한이 넘어가지 않는다는 전제로 간단하게 대칭키 암호화방식에서 쓰이는 보안비밀키와 Salt를 나름 안전하게 시스템상에 저장해 두고(웹 루트가 아닌 경로) 필요시 ColdFusion 또는 PHP 등에서 해당 파일을 불러와 키값을 쓴다면 나름은 할 건 한 셈이 아닌가.. 하는 생각으로 몇자 적습니다.

우선 ColdFusion(PHP 등)에서 쉘을 실행시킬 수 있다는 것이 좀 위험스럽지만 ColdFusion의 실행 런레벨을 최소화하고 일반계정으로 실행하게끔 설치하고 보안비밀키가 저장된 sh파일을 실행하여 그 값을 받아와 처리하면 되지 않을까.. 하는 생각말입니다. 물론 쉘에 어떤 값을 전달하고 그 값이 정상일때 쉘에서 보안비밀키를 토해내는 것 도 나쁘진 않을 것 같네요.

하지만 보통의 경우 sh는 스크립트 파일이므로 vi 등으로 얼마든이 소스를 열어볼 수 있습니다. 그래서 찾아본게 sh의 컴파일화.

sh파일을 컴파일하게 되면 (암호화하는것이 아니므로) 바로 실행할 수 있고, 소스는 볼 수 없는 장점이 생깁니다. 몇 종의 sh컴파일 솔루션이 있는데 무료로 쓸 수 있는 것이 SHC(SHell script Compiler)라는 것이 있습니다. (참조 : http://www.datsi.fi.upm.es/~frosal/)  

Ubuntu에서 APT로 설치하고자 하는 경우 8.04버전까지의 패키지가 존재하고 이후에는 없어서 구글링 해본 결과 wagung이란 개발자가 개인적 목적으로 deb 패키지를 만들어 두었네요. 원저작자 홈페이지에서는 tar.gz파일로 받아 컴파일 설치해야 합니다만 전 그냥 wagung의 패키지를 쓰기로 했습니다.

Ubuntu용 shc - 3.8.9 패키지 다운로드 : https://launchpad.net/~wagungs/+archive/personal/+packages

위 경로에서 shc패키지를 자신의 OS와 아키텍쳐(32/64bit)에 맞춰 다운로드 합니다. 그런 다음 본인의 서버로 옮겨 dpkg -i 옵션으로 설치합니다. 정말 간단하게 설치됩니다. 

SHC의 장점으로는 일단 실행가능한 형태로 컴파일 되면서 일정기간동안만 쉘을 실행하거나 하는 등의 약간의 옵션을 지원한다는 것 입니다. SHC의 Manpage을 보시면 옵션에 대한 설명이 있습니다.(참조 : http://www.datsi.fi.upm.es/~frosal/sources/shc.html) 간단하게 다음과 같이 sample.sh파일을 만들고 이를 컴파일해 봅시다.

#!/bin/sh 
echo "This is sample shell script!!" 
exit 0;
root@testServer:~# shc -f sample.sh

컴파일 결과 두개의 새로운 파일이 생성되었습니다. 하나는 sample.sh.x이고 하나는 sample.sh.x.c입니다. 전자는 실행파일이고, 후자는 C로 작성된 파일인데 두개의 파일이 같이 존재해야 sample.sh.x가 실행됩니다. vi로 열어보면 sample.sh.x는 소스를 확인할 수 없고 sample.sh.x.c는 컴파일된 실행파일을 실행하는 C코드입니다. 즉 원본 소스는 노출되지 않는다는 것 입니다.

따라서 쉘을 실행해서 어떤 값을 argument로 전달하면 쉘 내부에서 인증을 처리하고 정상적인 보안비밀키의 문자열을 출력해주도록 작성하고 컴파일해서 만들어 두고, ColdFusion에서 이 어떤값(쉘 내부로 전달할 비밀번호)을 전달하고 실행하도록 작성하면 비교적 안전하게 대칭키방식을 구현할 수 있지 않을까 생각하는데요. 

해당 ColdFusion파일 소스를 분석하면 금방 탄로날 것이지만 그 경우 시스템에서 해당 CFML파일을 원본그대로 유출해 가야하거나 시스템을 해킹해야하니까.. 비교적?이라는 단서를 붙힌 겁니다. 

물론, ColdFusion에서는 제품에 따라 약간 차이가 있지만 Java byte코드로 실행되도록 CFML소스 자체를 컴파일해버리는 기능이 있습니다. (자바 역시 디컴파일이 가능하다는 점에서 100% 안전한건 아니지만) 이 경우 소스를 전혀 볼 수 없으니까 역시나 비교적 안전하다고 할 수 있을 거 같습니다.

어쨋든 자체적으로 이런 여러 방법을 통해서 보안에 신경쓰다보면 자체적으로 취약점을 확인하거나 새로운 아이디어가 떠오를 수 있으니까 재밌는 것 같습니다. 혹시 이 글을 읽으시는 분 중에서 관련분야에 대한 조언을 해주실 수 있으신 분 있을까요? (웹 개발에 한정해서 말이죠)

참조한 글 : [기초강좌] shc를 이용한 쉘 스크립트 암호화하기 (Encrypting Shell Scripts)

There are no comments yet. - 아직 댓글이 없습니다.

Leave a Comment

Leave this field empty:




Powered by

© 2010-2018 NOOREE.COM