쉘 스크립트 암호화 SHC - 리눅스 Shell Script 암호화 SHC

Share

Last Updated on 11월 22, 2023 by Jade(정현호)

shc 는 쉘 스크립트를 암호화 바이너리로 바꿔 주는 프로그램입니다.

시스템에서 쉘 스크립트를 사용하다 보면 보면 민감한 데이터들이 일반 text 로 노출이 되게 되는데 이를 방지하기 위해 사용할 수 있습니다.     

사이트

사이트 주소는 아래 와 같습니다
http://www.datsi.fi.upm.es/~frosal/



직접 다운로드 경로는 아래와 같습니다.
http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
                

다운로드 및 설치

설치 파일을 다운로드 및 설치를 진행하겠습니다.

• 파일 다운로드 및 압축 해제

user$ wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
user$ tar zxvf shc-3.8.9b.tgz
user$ cd shc-3.8.9b


CentOS7 기준으로 man 페이지 파일의 경로와 makefile 에서 설정된 결과가 달라서 man 페이지 복사에 에러가 발생될 수 있어서 makefile 을 수정하고 진행하도록 하겠습니다.
man 페이지 파일이 크게 중요치 않거나 필요치 않다면 수정 없이 진행합니다.

• makefile 수정

## 파일 백업
user$ cp makefile makefile.old

## 파일 내용 변경
user$ sed -i "s/man\//share\/man\//g" makefile


• make install(설치) 진행 - 기본 경로

user$ sudo make install

cc -Wall shc.c -o shc
*** Installing shc and shc.1 on /usr/local
*** Do you want to continue? y <-- 질문에 y 를 입력합니다.
...
...
install -c -s shc /usr/local/bin/
install -c -m 644 shc.1 /usr/local/share/man/man1/



• make install(설치) 진행 - 다른 경로

기본적으로 다음의 경로에 파일이 위치하게 됩니다.
/usr/local/bin/
/usr/local/share/man/man1/

다른 경로에 설치를 원하거나 일반 유저로 설치를 진행해서 홈 디렉토리 등에 설치가 필요한 경우 다른 경로에 설치를 다음과 같이 진행합니다.

다음과 같은 홈 디렉토리에 아래에 설치를 진행할 경우
/home/jade/shc

makefile 에서 INSTALL_PATH 환경변수를 다음과 같이 수정합니다.
#INSTALL_PATH = /usr/local <-- 주석처리
INSTALL_PATH = /home/jade/shc

그 다음 디렉토리를 미리 생성합니다.
mkdir -p /home/jade/shc/bin
mkdir -p /home/jade/shc/share/man/man1

makefile 파일 수정과 디렉토리 생성이 완료되었다면 설치를 진행합니다.
$ make install
       

실행 및 사용법

사용법은 간단 합니다
아래와 같은 형태로 암호화하고자 하는 쉘 스크립트를 지정하면 됩니다.

먼저 테스트 쉘 스크립트를 간단하게 만들어 보겠습니다.

user$ vi test.sh

### 아래 내용으로 파일을 작성
#!/bin/bash

echo "hello world"


### 쉘 스크립트 실행
user$ sh test.sh
hello world


그 다음 shc 를 이용하여 쉘 스크립트를 암호화를 진행하도록 하겠습니다.

user$ shc -f test.sh


user$ ls -alrt test.sh*
-rwxr-xr-x. 1 user user 32 12월 27 22:00 test.sh
-rw-r--r--. 1 user  user 9298 12월 27 22:00 test.sh.x.c
-rwx--x--x. 1 user user 15872 12월 27 22:00 test.sh.x

==> test.sh.x 파일이 생성됨


암호화된 바이너리 실행 파일이 정상적으로 실행되는지 확인해보도록 하겠습니다.

## 실행권한 설정
user$ chmod 755 test.sh.x

## 파일 실행
user$ ./test.sh.x
hello world
    <-- 정상 출력됨


생성된 test.sh.x 파일 확인을 cat 으로 확인해 보도록 하겠습니다.

user$ cat test.sh.x
@@@@@@@@@@
tgetpidkillstrdupgetppidcall

<중략.. 바이너리 암호화 되어있음>


strings 명령어로도 확인해보도록 하겠습니다.

user$ strings test.sh.x
/lib64/ld-linux-x86-64.so.2
libc.so.6
sprintf
perror
__isoc99_sscanf
fork
time
_exit
getpid
kill
strdup
getppid
calloc
strlen
memset
__errno_location
memcmp
< 내용 중략 >


strings 명령어로 확인하였을 때도 쉘 스크립트의 내용(코드)이 확인되지 않습니다.

               

암호화시 사용 가능 옵션

-e date : 만료일 지정 (dd/mm/yyyy)

-m message : 만료일이 지났을 경우 메시지 출력

-f script_file : 스크립트 파일을 지정하여 바이너리 생성



연관된 다른 글

 

 

 

 

0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x