보안상 이유로 정적 라이브러리를 사용해야 할까요?
글쓴이: snow40 / 작성시간: 목, 2010/07/15 - 1:38오후
제 이야기를 좀 공유해보고 싶어서 글을 올려봅니다.. 사실은 약간의 고민거리입니다.
회사에 입사한지 얼마안되고 소스를 분석하다가 정적라이브러리로 외부업체에 전달되는걸 알았습니다. SDK 형식입니다.
정적라이브러리(.Lib)를 이용해서 해당업체의 프로그램에 붙이는 거죠.
그런데 문제는 정적라이브러리로 외부업체에 전달되려면 업체의 개발환경(VC6, VC2005등등)에 맞춰서 전달해줘야 하는데..
이게 번거롭게 느껴저서 DLL 로 전달하자고 제안을 해봤습니다.
그런데 그 제품은 보안솔루션입니다. 그 이유로 정적라이브러리로 배포해야 하는게 좋다고 하더군요..
일단은 알았다고 했지만 완전히 납득이 가질 않네요..
해커입장에서 바이너리를 디스어셈블해서 공격한다면 DLL이 좀 더 분석하기는 쉬울수 있지만
큰 상관이 없어보이고..
DLL이 배포상 편리한 이점도 있고 패치도 간단하게 할수있는 이점이 있잖아요.
여러분의 생각은 어떤지 듣고 싶습니다.
제 생각이 틀리다면, 보안프로그램이라고 해서 Lib로 전달해 줘야하는 이유를 납득시켜주실 수 있는 분 계신가요???
Forums:
뭐라고 답변을 못하겠네요.
보안솔루션이 어떠한 기능을 하는 것인지
예를 들어서 안티바이러스와 멜웨어 탐지 및 제거를 하는 기능인지
문서보안쪽인지, 아니면 암호화나 이런 것에 관련된 것인지 잘 모르겠구요
일반적으로 뽈때 DLL로 배포 못하는 특별한 이유는 모르겠네요.
혹시 구매하지 않고 무단 사용할 수 있는 여지가 있어서 그런 것인지는 모르겠지만..
LIB으로 배포한다면
LIB으로 배포한다면 악의적으로 DLL을 교체하는 것을 막을 수 있습니다.
원본 DLL과 같은 파일명으로 가짜 DLL을 만들어 파일을 교체한 다음 DllMain 함수에 악성 코드를 심거나
기존 DLL에서 익스포트한 함수가 다른 동작을 하게 만든다면 보안상 문제점이 발생할 수 있을 것 같습니다.
francisco4님의 말에 대해서 궁금한 점
그럼 Static Library를 사용해서 만든 EXE 자체를 바구어 버리면요?
예를 들어서 explorer.exe가 바이러스 화일이라면?
저는 실제로 이런 바이러스에 걸린 적이 있습니다.
그건 제품의 문제가
그건 제품의 문제가 아니라 사용자의 문제죠.
OTL
exe 자체를 바꾸는건
exe 자체를 바꾸는건 어차피 못 막는거지만 dll로 배포하게 되면 dll 을 바꾸는것도 못 막고 , exe 를 바꾸는 것도 못막는 결과가 됩니다.
dll 이 그리고 아무래도 분석이 좀 더 쉽지요.
Neogeo - Future is Now.
Neogeo - Future is Now.
여러가지 측면에서 생각해 보면
결론은 DLL, EXE 둘다 바꾸는 것은 못막고
DLL은 Reverse Engineering 하기가 좀 더 쉽다는 이야기 인 것 같군요.
그러면 DLL을 분석해서 무엇인가 얻었다고 하면 그것을 어떻게 악용할 수 있는지가 핵심이 될 것 같군요.
일단 DLL, EXE를 바꾸는 방법은 Onaccess Scanner를 사용하면 막을 수 있을 것 같고요.
그리고 분석해서 공격에 활용하는 것은, 분석해서 소스코드를 다 알아냈다고 해서 반드시 다 공격할 수 있는 것은 아닙니다.
예를 들어서 SSL은 소스 코드가 이미 공개 되어 있습니다.
하지만 제대로 구축된 SSL 사이트가 SSL의 취약점 때문에 뚫린 적은 없습니다.(MD5는 예외로 하고요)
참 양쪽다 장단점이
참 양쪽다 장단점이 있어서 곤란하네요 ㅋ
DLL로 배포하게되면 자체버그나 보안패치가 발생했을때 파일복사로 패치가 된다는게 참 좋은데..
한 예로, 리눅스관련 프로그램들중 zlib을 정적링크한 프로그램이 zlib의 버그때문에 많이 고생을 했었구요.
전 좀 실리주의인가봐요. 아니면 보안에 둔감한걸까요??..
"완벽한 보안은 없다"란 말이 있죠? 전 그 말에 동감을 하거든요.
DLL의 해킹을 우려해 힘든길로 가는 것보다는 적당히 실용적인 길로 가는게 좋다고 봅니다.
그러나 회사방침이 그렇게 정해졌으니 뭐 힘없는 팀원은 어쩌겠어요? 건의는 해봤으니 어쩔 수 없죠. -_-
그리고 질문에 참여해주신분들 감사드립니다. ^^
만드시는
만드시는 라이브러리가 변조 될 경우, 혹은 호출 인자가 유출되었을 경우 보안에 치명적인 위협을 줄 수 있는 내용이라면 dll 은 피하시는게 좋습니다.
dll 호출은 모조리 후킹되고 OS 상에서 감시 될 수 있습니다. ( 타입은 뽑기 힘들어도 파라미터 자체의 값은 전부 뽑아볼 수 있습니다.)
그에 반해 static lib은 cpu level 로 떠보더라도 알기 힘듭니다.
Neogeo - Future is Now.
Neogeo - Future is Now.
확실히 DLL 보다는 Static lib가 디스어셈하기는 힘들겠죠..
조언 감사합니다.
이제.. static lib로 지원하려면 VC6부터 VS2008까지의 lib를 배포할 수 있어야 하는데
버전마다 프로젝트파일과 솔루션파일이 관리하기게 좀 번거로울 것 같군요.
VC6을 지원하기 위해 VC6으로 작업해야 한다는건 정말 좌절입니다 ㅠ.ㅠ