C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

헤드라인 뉴스
[341] Delphi 4~7을 감염시키는 바이러스 유행중
박지훈.임프 [cbuilder] 12433 읽음    2009-08-19 04:39
조금 전에 델마당과 뉴스 기사로부터 알게되었는데.. Delphi 4, 5, 6, 7 네 버전을 감염시키는 바이러스가 유행하고 있습니다.

개발SW로 전파되는 '피라미드 바이러스' 발견
에스지어드밴텍, 델파이 개발자들 주의 당부
http://itnews.inews24.com/php/news_view.php?g_serial=436361&g_menu=020200

그리고 바이러스체이서의 개발사인 에스지어드밴택에서 자사 사이트에 올린 공지 내용.
http://www.viruschaser.com/main/customer/VCNotice_Dt.jsp?page=1&no=3448&vno=162¬iceType=A

사실 이 회사에서 발견한 것은 아니고 해외에서 먼저 발견된 것입니다.
http://www.delphipraxis.net/topic163041_virus+infects+delphi.html

제가 사용중인 세대의 PC들(사무실 PC, 집 PC, 노트북)을 살펴보니, 제 사무실 PC에도 감염되어 있더군요. 이 바이러스는 특별한 악의적 공격을 하거나 하지는 않지만, 감염된 델파이로 개발된 프로그램을 똑같이 감염시킵니다.

일단 감염여부 확인 방법과 치료 방법부터.
피씨의 Delphi 4, 5, 6, 7이 설치된 디렉토리에서 sysconst.bak 파일이 있는지 검사해서 있다면 감염된 것입니다. sysconst.bak 파일이 존재하는 경우, 즉 감염된 경우에는 원래의 원본 sysconst.dcu 파일이 확장자가 .bak으로 리네임된 것이고 sysconst.dcu 이름의 파일이 감염된 파일입니다. 따라서 sysconst.dcu 파일을 삭제한 후 sysconst.bak 파일의 확장자를 dcu로 변경해주기만 하면 됩니다.

지금 바로 확인들 해보세요. 또한, 이 시스템에서 감염된 후로 컴파일한 모든 프로그램이 똑같이 감염되므로, 모두 재컴파일해줘야 합니다. 물론 특별한 위해를 끼치지는 않기 때문에 그냥 놔둬도 큰일이 날 것은 아니지만.. 개발자로서 '내가 바이러스 프로그램을 배포했다' 라는 느낌은 정말 찜찜하지 않겠습니까.


이제, 기술적으로 좀더 자세히 써보자면..

이 바이러스는 Delphi의 IDE 자체를 감염시키거나 하는 것이 아니라, Delphi 설치 디렉토리 밑의 dcu 파일 하나만을 감염시키는 것이구요. 이 방식을 구체적으로 살펴보면 일반적인 바이러스의 감염 방식과는 다른 꽤 재미있는 아이디어인데...

감염된 sysconst.dcu 파일을 Hex 에디터 등으로 들여다보면, 정상적인 길이 이후에 짤막한 Delphi 소스코드가 문자열로 들어가 있습니다. 이 소스 코드를 분석해보면 어떻게 동작하는지 나오는데요. 이 dcu 파일이 링크된 프로그램을 실행하면, Delphi 설치 디렉토리 아래의 sysconst.pas 소스 파일을 열어서, 자체 문자열 소스코드를 덧붙입니다. 그리고 Delphi 커맨드라인 컴파일러인 dcc32.exe를 실행해서 이 파일을 컴파일하죠. 그래서 이 바이러스 코드를 가진 새로운 dcu 파일이 다시 생성됩니다. 그리고 원본 pas 파일은 원래대로 해놓습니다.

그래서 이 환경에서 컴파일하면 감염된 dcu 파일이 링크되어 결과적으로 프로그램도 감염된 상태가 되고요. 이 감염된 프로그램이 실행되면 먼저 로컬 시스템에 Delphi 4~7 버전이 있는지를 검사해서, 존재하면 앞서와 똑같은 동작, 즉 감염된 sysconst.dcu 파일들을 만들어놓습니다.

물론, Delphi로 프로그램을 만들더라도 bpl들을 따로 배포하도록 하면 sysconst.dcu를 비롯한 표준 dcu 파일들을 링크하지 않고 bpl로부터 동적 링크하게 되므로 바이러스의 영향은 받지 않습니다. 하지만 대부분의 Delphi 개발자들이 bpl 동적 로딩 옵션을 끄고 단독 실행 파일을 만들고 있기 때문에..

이런 전후 상황을 보면, 전문적인 해커가 아니라 Delphi 개발자 한 사람이 번쩍 떠오른 아이디어를 장난스럽게 한번 구현해본 것 같습니다. 구현 방식이나 여러 면에서 정말 재미있기는 한데, 괜히 Delphi 자체에 문제가 있는 것처럼 비춰질까 좀 걱정스럽네요.

그럼, 왜 Delphi 4, 5, 6, 7 버전만 감염될까요. 3 이하 버전과 2005~2009 이상 버전들은 왜 감염되지 않을까요? 일단, 3 이하 버전에는 sysconst 유닛 자체가 없습니다. 4 버전부터 다른 유닛으로부터 sysconst 유닛이 분리되어 생겼죠. 또한, 이 감염 코드는 레지스트리에서 Delphi의 설치 여부와 설치 경로를 확인하는데, Delphi 7까지만 기존의 레지스트리 키 주소이고 2005부터는 Delphi 대신 BDS라는 이름의 키로 기록되기 때문에 감염되지 않는 것입니다.

그럼, 왜 sysconst를 선택했을까요. 이 바이러스의 방식이, 기존 델파이 기본 유닛들 중 하나의 소스 코드에 자신의 소스 코드를 덧붙이는 아이디어입니다. 따라서 기존에 코드가 많이 있는 pas 소스라면 개발자가 꽤 귀찮아질 겁니다. 반면, sysconst.pas는, 이름 그대로 상수 값들만 가진 유닛이기 때문에 선언만 잔뜩 있고 코드가 전혀 없습니다. 그래서 스트링으로 가지고 있는 자신의 소스를 쉽게 갖다 붙일 수가 있죠.

그럼, 이런 경우까지 다 감안해서 다시 만들면? 물론 조건을 더 추가해서 코드를 더 보강하면 Delphi 3 이하 버전과 2005 이상에도 감염되도록 만들 수 있습니다. 소스를 추가하고 dcc32 컴파일러로 직접 컴파일까지 해버리기 때문에요.

그렇다고 이런 위험이 Delphi에만 있을까요? 그것도 아니죠. Delphi의 dcu와 마찬가지로, C++ 개발툴의 경우에는 개발툴 자체에 소스와 함께 그 obj 혹은 lib 파일을 가지고 있는 경우가 대부분이죠. 그럼 똑같은 방식에 똑같이 당할 수 있습니다. 개발툴이기 때문에 중간 코드, 오브젝트 코드 파일을 가지고 있을 수밖에 없기 때문이죠. 뭐 닷넷이라고 안그럴까요? 닷넷이라고 해도 마찬가지 방식이 충분히 가능합니다. 내일 당장 VC++을 똑같은 방식으로 감염시키는 바이러스가 충분히 나올 수 있죠. (심심하면 나라도 만들어볼까나? ㅎㅎ)


원문 : http://blog.devgear.co.kr/imp/entry/Delphi-47을-감염시키는-바이러스-유행중
남병철.레조 [lezo]   2009-08-19 09:26 X
부분 발췌가 횡횡한 곳이라 혹시 마지막 한마디로 오해하는 사람들이 생기지 않을까 하는 괜한 노파심이... ^^;
아폴론 [apollon]   2009-08-19 12:18 X
오늘아침 델파이7로 만든 실행파일들이 모두 삭제가 되었습니다.  사무실 사람들이 Exe 실행을 하면 Sophos보안 프로그램이바이러스 감염 exe라며 삭제 해 버리더라고요..아주 난감했어요..그래서 제 컴에서 다시 컴파일 했는데..컴파일 하는대로 생겨나는 exe를 삭제 하더라고요...밥숫가락 놓는 줄 알았습니다.ㅎㅎㅎ

다행히..박지훈님의 글을 보고 원인을 알았어요..
감사드립니다...제 밥줄을 계속 잡을 수 있게 되어서요..

델파이가 실력 없는 프로그래머도 밥 먹게 해주는데..어쩌자고 저런 바이러스는 만들어 퍼트리는지..에혀..

하라는 대로 하고 컴파일 하니  exe가 이쁘게 보이네요..
이젠 전 직원 컴에 삭제된 exe를  설치 해야 하는데..이건 어쩌나...휴~
utime.김성하 [utime]   2009-08-20 09:11 X
아놔~ 걸렸어요~ ㅠㅠ
상용에 배포된 녀석도 걸렸다는~ ㅠㅠ 우쨌을까나...
장성호 [nasilso]   2009-08-20 13:49 X
여기는 비교적 조용하네요
이 바이러스가 하는일이 심각한것도 없고, 감염도 델파이4~7버젼이깔린 개발자 pc의 특정 file만 감염하니
별문제가 없을꺼라고 생각했는데..

V3에서도 이제 이 바이러스를 감지하게 되면서
그동안 Delphi로 개발배포된 바이너리가 바이러스로 잡히면서  여기저기서 문제가 나타나네요

그래서 그런지 델마당 쪽은 날리가 아닙니다.

Runtime Package로 배포하는것을 습관화 해뒀으면 파장이 적을낀데...
저희회사는 다행이 CBuilder를 주 개발툴로 써서 문제될일이 없네요
김병주 [webspys]   2009-08-28 08:12 X
기존 백신은 이것을 삭제하는데 드뎌 치료제가 나왔네요
http://tmcs.co.kr/delphi 에 가시면 다운받을 수 있네요

+ -
이전글:  
다음글:  
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.