설치형 소프트웨어의 라이선스 관리와SaaS 환경에서의 보안 기술

1. 서론

  소프트웨어의 발전과 함께 소프트웨어 유지 보수와 보안은 소프트웨어 엔지니어링의 중요한 연구가 된다. 소프트웨어 역공학은 유지 보수와 보안에서 대체 불가능한 역할을 한다[1]. 소프트웨어 역공학은 소프트웨어의 재사용, 기존 소프트웨어와 호환성 유지, 소프트웨어 보안 취약점 분석 등의 용도로 긍정적으로 허용될 수 있다. 그러나 불법적인 역공학은 경쟁사가 개발한 소프트웨어의 핵심 알고리즘을 드러내어 지적 재산권을 침해하고, 불법복제를 증가시켜 건전한 소프트웨어 개발 생태계를 해칠 수 있다[2]. 2019년 소프트웨어정책연구소에서 발표한 "국가별 SW 불법 복제율" 통계를 보면 2017년의 한국의 불법 PC 소프트웨어 설치율은 32%이다. 한국과 비슷한 경제규모의 스페인, 이탈리아 등과 비교했을 때와는 낮은 수치이지만 여전히 미국, 호주 등과 비교했을 때 높은 수치이다. 소프트웨어 개발사들은 불법 복제를 막아 자사의 소프트웨어 가치와 지적재산권을 지키기 위해 노력해 왔다. 역공학 방지 기술은 소프트웨어의 불법 복제를 기술적으로 방지하고 사용자를 인증하여 제품을 사용하는 고객이 정당한 사용을 대가로 요금을 지불하게 하는 것을 목적으로 한다. 하지만 기존 설치형 소프트웨어 사용 방식은 클라이언트/서버 방식으로 서비스를 제공함으로써 설치 및 배포, 업그레이드, 문제점 관리 등 소프트웨어 전반에 걸쳐 관리가 힘들고 고비용의 문제점이 있다. 이러한 문제점을 해결하기 위해 SaaS(Software as a Service) 방식의 소프트웨어 사용 환경이 제안되었다. 초기 투자비용이 거의 없고, 쉽고 간편하며, 저비용 IT 서비스가 가능한 SaaS 기반의 소프트웨어 제공이 연구되고 있다[4]. 따라서 소프트웨어 보호 관점에서 불법 복제 및 크랙 방지 기술로 패킹(Packing), 난독화(Obfuscation), 암호화(Encryption) 등을 간단하게 소개하고, 이를 보완하여 네트워크를 통한 소프트웨어 사용이 가능하도록 한 SaaS에서 사용된 보안 기술 대해 설명한다.

2. 사전 연구

2.1 소프트웨어 라이선스(Software License)

  소프트웨어 라이선스는 프로그램의 저작권을 가진 저작자가 타인에게 특정된 규정 안에서 프로그램을 사용할 수 있도록 사용권을 허락하는 형태의 계약을 의미한다. 하드웨어와 달리 소프트웨어는 쉽게 복제할 수 있기 때문에 소프트웨어 개발사들은 불법 복제를 막아 자사의 소프트웨어의 금전적 가치와 지적 재산권을 지키기 위해 노력해 왔다. 소프트웨어가 단순하고 판매량이 적을 때에는 불법 복제만 막으면 된다. 하지만 소프트웨어의 규모가 커지고 복잡해지면 불법 사용 방지라는 목표를 충족시키기 위해 라이선스 기능의 구현이 요구된다. 라이선싱은 불법 사용 방지, 라이선스 관리와 기능이라는 세 가지 목표 아래에 설계되었다. 완성된 소프트웨어를 보호 층으로 감싸는 포장 방식 또는 API를 사용하여 소프트웨어에 삽입하는 두 가지 방식을 사용한다. 기존의 라이선스 관리 솔루션은 내부 직원용, 대리점용, 고객용으로 나누어져 권한에 따라 다른 역할을 수행한다. 이를 위해 제품 개발사는 전사적 라이선싱 시스템을 개발한다. 전사적 라이선싱 시스템은 웹으로 접속해야 하므로 웹 서버가 필요하고, 필요한 데이터를 저장하기 위한 데이터베이스도 필요하다. 기업에서 이미 사용하고 있는 ERP(전사적 자원 관리 시스템)CRM(고객 관리 시스템)도 포함되어야 한다. 시스템 구축이 완료되면 개발사는 필요로 하는 기능을 충족시키는 제품을 만들 수 있고 유지 보수에 적은 비용이 들면서 소프트웨어 생명주기를 관리할 수 있다. 하지만 소프트웨어가 복잡해지고 개발사의 마케팅 전략이 발전할수록, 개발사는 더욱 빠르게 소프트웨어 생명주기를 관리해야 한다.

3. 설치형 소프트웨어

  인증 측면에서 설치형 소프트웨어는 대부분 하드웨어 인증을 사용한다. 예를 들어 MAC 주소나 메인보드 시리얼 번호 등에 기반한 라이선스를 설치하게 된다. 따라서 소프트웨어가 다른 PC로 복제되더라도 라이선스가 동작하지 않기 때문에 불법 복제로부터 보호할 수 있다.

3.1 역공학 방지 기술

  역공학 방지 기술은 소프트웨어 개발자들이 소프트웨어 저작권을 보호하고, 소프트웨어 크랙 버전이 나오는 시간을 연장하기 위해 모든 종류의 효과적인 방법과 기술을 연구하여 소프트웨어가 가능한 한 불법적으로 사용되지 않도록 하는 것이다. 특수 하드웨어 장비 사용 여부에 따라 소프트웨어 보호 기술을 하드웨어 기반 보호(HBL;Hardware-Based License)와 소프트웨어 기반 보호(SBL;Software-Based License)로 나눌 수 있다. HBLUSB와 같은 하드웨어 키락(Key Lock)을 사용하는 기술이다. 소프트웨어를 개발할때 키락의 API를 소프트웨어 내에 추가한다. 이렇게 추가한 APIPC내의 소프트웨어가 구동할 때 암호화 알고리즘을 거쳐 키락의 존재를 확인한다. 키락이 존재하지 않으면 소프트웨어는 구동을 멈추게 된다. SBL은 프로그램의 흐름을 분석하여 각 모듈의 기능과 모듈 간의 관계를 분석하는 것을 소프트웨어적으로 막는 것이다. 이러한 소프트웨어 역공학기술을 적용하는 것이 소프트웨어 라이선스를 보호하는 첫 번째 단계이다. 다음은 소프트웨어 보호 관점에서 패킹과 바이너리 암호화에 대해 분석한 것이다.

3.1.1. 패킹

  소프트웨어 역공학 방지를 위해서 패킹 기법에 대한 연구가 진행되고 있다. 패킹은 소프트웨어 역공학 방지를 위해 흔히 사용하는 방법으로 '실행 파일을 압축하는 것'을 의미하며, 실행되면서 압축이 풀리고(언패킹; Unpacking) 실제 바이너리 파일이 실행되게 된다. 패킹은 파일의 크기를 줄여 빠르게 전송하기 위해 사용되었지만, 최근에는 바이너리코드가 암호화 또는 압축되어 분석하기 힘든 장점을 이용하여 패킹을 역공학 방지 기술로 이용하기 시작하였다.

[그림 1] 소프트웨어 언패킹 동작 과정

  [그림 1]와 같이 패킹되기 전의 프로그램은 맨 처음 코드의 주소인 EP(Entry Point)를 참조하여 언패킹을 수행하는 코드가 실행된다. 언패킹을 수행하는 코드가 종료되면 원본 데이터가 [그림 1]의 오른쪽 상태인 ‘Unpacked Original Data’에 기록되며 소프트웨어의 정보가 원본 데이터로 변경된다. 그리고 실행코드 섹션으로 점프해서 원래의 OEP로 진입하게 되어 역공학을 차단할 수 있다[5].

3.1.2. 코드 난독화

  코드 난독화는 프로그램의 역공학 분석을 어렵게 하기 위해 사용되는 기법으로 프로그램의 의미를 유지하면서 배치, 논리, 자료, 구조 등을 변화시켜 분석가 및 자동화된 도구가 분석하기 어렵게 하는 것을 의미한다. 역공학을 완전히 방어하는 것은 불가능하기 때문에 코드의 변수, 클래스, 문자열 등을 해석하기 어렵게 변경 하거나 실행되지 않는 임의의 코드를 삽입하는 등 가독성을 낮춰 분석을 지연시키는 방식이다. C/C++로 컴파일된 바이너리의 경우 심볼 정보를 지움으로써 해당 파일을 디컴파일했을 때 사람이 이해할 수 있는 정보를 최대한 줄일 수 있다. Java, .Net 프로그램의 경우 프로그램 수행에 심볼 정보가 필요하므로 해당 정보를 제거할 수는 없으나 클래스, 변수 이름을 변경함으로써 가독성을 낮출 수 있다. 그리고 필요 이상의 복잡성을 추가하거나, 데이터를 인코딩/암호화할 수 있다. 동일한 기능의 코드를 의도적으로 복잡하게 작성하거나 필요 없는 코드를 삽입함으로써 분석을 지연시킬 수 있다. 그리고 바이너리에 포함된 데이터를 알아보기 힘든 방식으로 암호화하고 필요한 경우에만 복호화하여 사용하는 방법으로 중요 정보를 숨길 수 있다.

 

 

4. SaaS

  기존 소프트웨어의 방식인 On-Premise방식의 라이선스가 소프트웨어를 PC에 설치하고 실행하는 방식이었다면 SaaS의 인증은 PC에서 로그인해서 실행하지만 실제 실행은 PC가 아닌 서버에서 실행된다. 사용자의 PC에는 소프트웨어가 설치되어 있지 않다.

[그림 2] SaaS 동작 과정

  [그림 2]SaaS의 동작 과정을 나타낸 것이다. SaaS는 클라우드 또는 인터넷 상의 서버에 설치되어 있고 그곳에서 실행된다. 아이디와 이에 연결된 라이선스를 확인하는 작업은 클라우드 상의 라이선스 서버를 거치게 된다. SaaS가 부각되는 이유는 인터넷 속도이다. 인터넷 속도가 느릴 때에는 소프트웨어를 인터넷으로 사용한다는 것은 불가능한 일이었지만 이제는 충분히 가능한 속도를 사용할 수 있게 되었고 여러가지 장점을 제공하고 있다. 첫 번째로 인터넷이 되는 어디서든 사용이 가능하다는 점이다. 소프트웨어가 설치된 PC에서만 사용 가능했던 기존 방법과는 달리 SaaS는 작업 상태를 저장하여 인터넷이 되는 어떤 PC에 상관없이 사용이 가능하다. 두 번째로 사용량에 따른 과금이 가능해진다. 기존의 유료 소프트웨어를 사용하기 위해서는 고가의 라이선스 비용을 지불하고 사용해야 한다. 하지만 SaaS는 사용량 단위의 유동적인 과금이 가능하다. 소프트웨어 구매 방식이 영구 버전 라이선스 도입 방식에서 월 또는 연간 단위로 사용한 만큼 비용을 지불하는 방식을 사용할 수 있다. 이는 한 번에 수백만 원에서 수천만 원에 이르는 구매 비용을 절반 이하로 낮춰 구매자 초기 도입 부담을 줄여줄 수 있다. 이러한 장점을 가진 SaaS는 기술적 지식이 부족한 사용자들이 기업 데이터 보호에 적절한 조치를 취하지 않고도 소프트웨어를 사용할 수 있다[6]. 하지만 우발적이거나 악의적인 중대한 데이터 누출과 규정 위반 위험을 초래할 수 있는데 이는 SaaS 사용자들이 보안의 필요성을 인식하더라도 이들의 데이터 보호 능력은 개발사가 제공하는 도구에만 의존하기 때문이다. 따라서 개발사는 데이터 누출, 규제 위반 등의 위협으로부터 SaaS를 안전하게 보호하기 위해 다음과 같은 보안 기술들을 사용한다.

4.1. CASB(Cloud Access Security Broker)

  클라우드 환경에서의 기술적 보안 이슈는 사용자 측면의 관리 방식과 범위를 벗어난 단말(BYOD) 사용 문제이다. 다양한 형태의 클라우드 공급자가 존재하는 상황에서 SaaS 외부 공간에서 접속을 시도하더라도 소프트웨어는 정당한 사용자에게만 서비스를 제공하도록 허용되어야 한다. 다른 외부 공간(테넌트)에서 개인적으로 활용하는 경우에는 사용자가 구별되어야 하며, 이러한 서로 다른 테넌트 영역 간 파일 공유는 데이터 보호를 위해 모니터링 되고 차단되어야 한다.

4.2. 데이터 암호화 및 DLP(Data Loss Prevention)

  SaaS는 서버에 설치되어 동작하기 때문에 바이너리 암호화 과정은 필요 없다. 데이터 암호화 및 토큰화는 바이너리 암호화와는 다르게 비인가 사용자가 인증 데이터를 보거나 조작하여 SaaS 소프트웨어를 사용할 수 없도록 암호화하는 것이다. 서버에 저장된 암호화 키를 사용하여 정형 데이터(데이터베이스의 특정 필드)와 비정형 데이터(전송되는 전체 파일)를 모두 암호화할 수 있다. 데이터 상주를 위해 일부 필드 또는 데이터 요소에 대한 토큰화가 필요한 경우에는 실제 데이터를 대체하여 SaaS 소프트웨어로 전송된다. 데이터 유실 방지를 위해 DLP를 사용한다. 이는 소프트웨어 사용 중 전송될 수 있는 개인정보, 비밀 등 중요정보가 PC로부터 유출되는 것을 막아준다. 설치형 소프트웨어에 비해 SaaS 소프트웨어는 가상 및 클라우드 인프라로의 이동이 빈번해지고 있고 어느 시점에서든 재무 데이터, 고객 정보 또는 거래 기밀 정보가 분실되거나 도난당할 수 있다. DLP는 이러한 정보를 빠르게 식별하고 추적 및 보호할 수 있도록 하는 기술이다. DLP 정책 설정을 통해 USB 드라이브, 모바일 장치 등의 클라우드 연결을 제한할 수 있고 키워드 및 파일 속성에 기반하여 부적절한 데이터의 사용 및 탐지가 가능하다. DLP는 사용자의 단말 및 클라우드 스토리지 등 SaaS 소프트웨어 구성 요소 어디에든 설치되어 운영될 수 있으며 연결된 위협으로부터 데이터 보호를 제공하는 기술이다.

5. 결론

  위의 분석을 통해 컴퓨터 기술의 발달로 소프트웨어 분야는 점점 더 경쟁과 도전에 직면하고 있다는 것을 확인하였다. 소프트웨어가 복잡해지고 규모가 커질수록 개발사는 소프트웨어 불법 복제 방지라는 목표와 함께 더 쉽고 효율적으로 소프트웨어 보호, 라이선스 관리를 위한 기술 및 프로세스 개발이 필요하다. 소프트웨어 구동 환경이 PC에 설치해 사용하는 전통적인 방식에서 인터넷에 로그인해 사용하는 SaaS 방식으로 점차 이동하고 있다. 모든 소프트웨어가 SaaS 방식으로 전환되지는 않겠지만, 점점 더 많은 소프트웨어가 SaaS로 이동하고 있다. 소프트웨어 개발사의 지적 재산을 지키는 동시에 효율적인 업무를 위한 라이선싱 기술에 대해 조사해 보았다. 개발사의 프로세스에 따라 SaaS의 장단점이 달라지는 만큼 위험과 생산성 간의 균형을 맞추고 보안 전략을 잘 수립한다면 개발한 소프트웨어를 안전하게 배포할 수 있을 것이다.

6. 참고문헌

[1] Zhuang Chen, Bing Pen, Yabin Sun, "A Survey of Software Reverse Engineering Applications", ICAIS, pp.235-246, 2019.

[2] 오동엽, 류재철, "바이너리 취약점 분석을 위한 파일 포맷 분석기 구현", 한국컴퓨터정보학회 학술발표논문집, vol. 26(2), pp.265-268, 2018.

[3] 황정빈, "한국 불법 SW 비율 32%...미국은 15%", ZDNetKorea, [Online]. Available: https://www.zdnet.co.kr/view/?no=20180607165236, 2018.

[4] 민병원, 오용선, "SaaS 기반 멀티테넌트 환경을 지원하는 통합전자도서관시스템 구현", 한국콘텐츠학회논문지, vol.11, pp.93-103, 2011.

[5] 장윤환, "PE 구조와 인공신경망을 사용한 패커 식별 방안 연구", 한양대학교, M.A., 2020.

[6] "SaaS 애플리케이션 보안 및 사용자 인증", 한국데이터산업진흥원, [Online]. Available: https://kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=39&dbnum=176006&mode=detail&type=techreport, 2013.

[7] “클라우드와 CASB 1. 클라우드 책임 공유 모델과 CASB의 등장”, [Online] Available: https://blog.naver.com/skinfosec2000/221706648385

반응형