PGR21.com
- 자유 주제로 사용할 수 있는 게시판입니다.
- 토론 게시판의 용도를 겸합니다.
Date 2015/03/01 12:56:01
Name 랜덤여신
Subject [일반] 믿음의 근원에 대하여
컴퓨터 세계에는 '컴파일러'라는 물건이 있습니다. 컴파일러는 사람의 언어를 컴퓨터의 언어로 번역하는 특수한 목적의 프로그램입니다. 컴퓨터의 언어, 다시 말해 기계어는 0과 1밖에 없어서 사람이 직접 다루려면 머리에 지진이 나기에, 보통 영어로 소스 코드를 작성하고 기계어로 바꾸는 과정을 거치죠. 이걸 해주는 게 컴파일러입니다. 비유하자면, 소스 코드는 [설계도]이고, 컴파일러는 그 설계도를 바탕으로 [실제 건물](기계어)을 만들어 주는 [로봇] 같은 것이라고 생각할 수 있겠죠.

C 언어의 컴파일러를 이용하는 영리한 공격을 시연한 사람이 있습니다. 유닉스의 아버지 켄 톰프슨(Ken Thompson)이죠. 이 사람은 컴퓨터의 로그인 화면을 개조해서, 특정 아이디와 비밀번호를 입력하면 무조건 관리자로 로그인되게 했습니다. 이런 것을 '뒷문'(backdoor)이라고 합니다. 보통 컴퓨터 제조사가 나중에 수리 등을 용이하게 하려고 사용자 몰래 집어넣곤 하죠. 물론 보안상 무척 치명적인 방법입니다.

켄 톰프슨이 말한 뒷문은 이렇게 간단한 것이 아니었습니다. 그는 제조사조차 알 수 없는 뒷문을 제안했습니다. 로그인 화면도 프로그램이므로, 원래는 [소스 코드의 형태로 존재]하던 것입니다. 이것을 기계어로 바꾸기 위해 컴파일러를 이용하게 되는데, 바로 이 번역 과정에 개입하자는 것이었죠. 컴파일러가 판단하기에 이것이 로그인 화면과 관련된 코드이면, 최종적인 기계어에 자동으로 뒷문을 심는 것입니다.

이 경우 로그인 화면의 소스 코드만 봐서는 아무 이상도 잡아 낼 수 없게 됩니다. C 언어 컴파일러의 소스 코드를 보고 나서야 겨우 이 컴파일러에 심각한 문제가 있다는 것을 알게 되겠죠.

그러나 켄 톰프슨은 여기서 한 걸음 더 나아갑니다. 컴파일러도 프로그램이므로, 컴파일러의 새로운 버전이 나오면, 그 또한 원래는 [소스 코드의 형태로 나타나 있습니다.] 따라서 기존 버전의 컴파일러가 새 버전의 컴파일러를 번역해서 기계어로 만들어야 하는데, 이 번역 과정에서 [로그인 화면을 조작해서 뒷문을 심는 기능] 자체를 넣자는 것입니다.


컴파일러가 지금 번역하는 소스 코드를 분석해서,

로그인 화면인가? -> 로그인 화면의 기계어를 수정하여 '뒷문'을 탑재
컴파일러 자신인가? -> 컴파일러의 기계어를 수정하여 '뒷문 심는 기능'을 탑재


위의 로봇 비유를 사용하면 다음과 같습니다:


로봇이 지금 제작 중인 물건의 설계도를 분석해서,

건물인가? -> 특정 열쇠로 무조건 열리도록 건물 문을 제작
로봇인가? -> 새로 만들어질 로봇에 '특정 열쇠로 무조건 열리도록 건물 문을 제작하는 기능'을 탑재


이러면 마술 같은 일이 일어납니다. [컴파일러의 소스 코드와 로그인 화면의 소스 코드를 모두 살펴 봐도 뒷문을 찾을 수가 없습니다!] 그러나 뒷문은 존재합니다. 최종 기계어에 포함되어 있기 때문입니다. 또한 앞으로 컴파일러가 새 버전을 거듭하여 내놓더라도 여전히 뒷문을 심는 기능이 남아 있게 됩니다.

프로그램의 버그를 잡는 방법 중 대표적인 것이 소스 코드를 열심히 들여다 보는 것입니다. 여러 사람에 의해 리뷰를 거치고 나면 비로소 좀 믿을만 하다고 여겨지게 됩니다. 그러나 [이 경우에는 그런 방법을 쓰기 어렵습니다.] 애초에 소스 코드에 그런 코드가 없기 때문입니다.

그렇다고 앞으로는 기계어를 분석하자고 할 수도 없습니다. 기계어는 0과 1로만 구성되어 있어 알아보기 어려울 뿐더러, 엄청나게 방대합니다. 이건 마치 건물의 구조적 문제를 밝혀내기 위해서 설계도를 보는 대신 건물을 구성하는 분자 하나 하나를 뜯어 보자는 이야기와도 같습니다.

여기서 프로그래밍을 아시는 어떤 분들은 C 언어 컴파일러 대신 다른 컴파일러, 예를 들어 자바 컴파일러를 이용하면 어떨까 하시는 분도 계실 수 있습니다. 그러나 여기에는 한 가지 치명적인 문제가 있습니다. 자바 컴파일러도 [처음에는 자바로 만들어진 것이 아니었다]는 것이죠.

왜냐하면 [최초의 자바 컴파일러]는 자바로 만들 수 없기 때문입니다. 당연하죠. 그 언어 번역기가 아직 없는데 어떻게 자바 코드를 기계어로 번역할 수 있겠습니까. 따라서 보통 다른 언어로 작성한 다음 그 언어의 컴파일러를 이용하여 만들게 됩니다. 그렇다면 이제 그 언어의 컴파일러를 믿을 수 있느냐가 문제가 되는 것인데... 이런 식으로 따라가다 보면 십중팔구는 C 언어 컴파일러로 수렴하게 되죠.

----

다른 예를 들어 보겠습니다. 요즘은 마이크로소프트도 온라인 구매를 지원합니다. 사이트에서 직접 설치 시디 파일(.iso)을 다운로드할 수 있죠. 그런데, 다운로드한 설치 파일이 바이러스에 감염되지 않은 순수한 윈도 운영 체제라는 것을 어떻게 알 수 있을까요?

이때 등장하는 것이 보안 접속( https://pgr21.co.kr/pb/pb.php?id=freedom&no=56667 )입니다. 보안 접속을 사용하면 도청이 불가능하므로, 내가 받은 파일이 정품 그대로라는 것을 보장할 수 있죠.

그러나, 내가 쓰는 컴퓨터가 [처음부터 도청을 용인하도록 설정되어 있었다면] 어떻겠습니까? 일반적으로 보안 접속은 인증 받은 웹 사이트가 아니면 위험하다며 접속조차 되지 않는데, 내 컴퓨터는 그런 사이트도 허용하도록 되어 있다면 말이죠. 있을 수 없는 일이라고 여기실 수도 있겠습니다만, 이것이 바로 얼마 전에 레노보가 자사의 컴퓨터를 조작한 바로 그 수법이었습니다( http://www.bloter.net/archives/220886 ). 다른 회사도 얼마든지 비슷한 수단을 동원할 수 있죠. 아니면 국가나 회사에서 여러분의 컴퓨터가 그런 조작이 되어 있도록 선탑재를 시킬지도 모릅니다.

여기서 컴퓨터에 밝으신 어떤 분들은 해시를 확인하면 된다고 여기실지도 모르겠습니다. 그러나, [그 해시 값조차도 어딘가에서 받아 와야 합니다.] 보안 접속으로 해시 값을 받아온다고 해도 이전 문단과 같은 위험성이 있죠. 차라리 프린터로 인쇄해서 국제 택배로 보내든지, 아니면 유일하게 믿을 만한 방법은 직접 빌 게이츠를 찾아 가서 해시 값을 묻는 방법밖에 없을지도 모릅니다. 그분이 기억을 하고 계실런지는 모르겠습니다만...

----

사실, 이런 논의는 이어가다 보면 끝이 없습니다. 혹시 모르죠. 우리 DNA에 ['컴퓨터 소프트웨어에 뒷문을 심게 만드는' 유전자]가 포함되어 있을 수도 있으니까요. 우리 모르게 말입니다. 사람은 컴퓨터 앞에 앉으면 무의식중에 그런 코드를 작성하도록 프로그램되어 있는 거죠. 물론 신이 (만일 있다면) 그렇게까지 할 일 없으리라고는 저도 생각하지 않습니다만, 의심이란 끝도 없이 펼쳐나갈 수 있는 것입니다.

따라서 보통은 특정 선을 정해 놓고, '여기가 믿음의 근원이다'(source of trust)라고 선언하곤 합니다. 안타깝지만 현재 능력으로는, 그 이상 거슬러 올라가서 신뢰를 증명할 방법이 없습니다. 컴파일러에 저런 뒷문이 없다고 믿고, 보안 접속이 나를 속이지 않으리라고 믿는 것이죠. 그러나 언제나 주의는 필요하고, 그것이 깨졌을 때의 후폭풍은 어마어마할 것입니다. 그런 일이 없기만을 바라야죠. (30년 가까이 써 왔던 프로그램에 뒷문이 있다는 것이 뒤늦게 밝혀진다면...)

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
하얀냥이
15/03/01 13:21
수정 아이콘
스마트폰 쪽에서 삼성, 엘지, 샤오미 등 안드로이드 진영이 했었다가 밝혀졌던 백도어 프로그램 설치 관련한 얘기군요.

그렇다고 세상 모든 IT기기를 다 의심할 수는 없는 노릇이고 특정 국가들, 회사들의 제품을 신뢰할 수 없게 되네요.

잘 읽었습니다.
전립선
15/03/01 13:24
수정 아이콘
데카르트적이네요.
15/03/01 13:25
수정 아이콘
C의 창시자가 기계어 수준에서 백도어를 심었다면 어쩔수 없겠지만... 그나마 전과가 없는 제조사를 선택해야 하나요.
2막4장
15/03/01 13:31
수정 아이콘
뭐 음모가 있다는 것을 수많은 사람이 제기하지만 그 당시엔 알수 없다가
모종의 사건이나 보안문서 해제등으로 나오면 알게되는 경우도 있죠
문제의 해결?은 때로는 소스코드 밖에서(다시 말하면 다른차원..정도?) 이뤄져야 할 것 같기도 하네요
랜덤여신
15/03/01 13:35
수정 아이콘
단위 테스트 이상의, 입출력뿐만 아니라 전반적인 동작을 (잠재적인 것까지) 검사하는 기술이 있으면 좋겠다는 생각을 합니다. 정적 분석 같은 것도 결국에는 소스 코드를 기반으로 하니까 어려워 보이지만 말입니다. 이런 걸 볼 때마다 소프트웨어 테스팅 분야가 아직 갈 길이 멀다는 생각이 듭니다.
2막4장
15/03/01 14:26
수정 아이콘
네 정적분석도 도구의 한가지 일 뿐이겠죠
다만 아직까지 악의를 가지고 컴파일러 코드에 손을 대는 사람과 그 배포 방법론이 공개된 것이 없으니 (적어도 저는 처음 들었습니다) 그냥 두고 일정이상의 피해가 생기기 전까진 뭐 두고 봐야하지 않을까요? 흐흐
아니면 돈많은 사람더러 만들어보라고 제안하던지... 돈있으면 다됩닏...
The Genius
15/03/01 13:47
수정 아이콘
좋은 음모론입니다.
지니랜드
15/03/01 15:46
수정 아이콘
쉽게 설명해주셔서 재밌게 읽었습니다 생각해볼 문제네요^^
코알라로태어날걸
15/03/01 16:54
수정 아이콘
흥미로운 주제입니다.

저야 프로그래밍에 대해서 아는 바가 전혀 없습니다만, 말씀하신 바의 "근원"에 대해서는 조금 생각하는 바가 있습니다.

저는 동양철학에 대해서는 조금 알고 있다고 생각하고, 서양철학에 대해서는 들어본 바가 없지는 않다 정도로 여기고 있습니다만, 그조차도 군대에 간 이후였습니다. 철학을 공부했던(학부과정 이상을 마친) 사람이 군대에 오는 일도 드물 것인데, 군대에 오는 동기가 하필 동양철학과 서양철학이다보니 서로의 책을 바꿔가며 읽은 일이 있었습니다. 그 전에는 교양 수준에서 접할 정도만 읽어볼 수 있었지요.
그러다보니 서양의 시각과 동양의 시각이 많이 다르다는 것을 느낄 수 있었는데, 참 흥미로운 주제였습니다.(제가 알고 있는 서양철학에 대한 것은 아마 학부 2,3 학년 생 정도라고 생각합니다. 그보다 더 모자랄 수도 있겠지요. 따라서 부족한 부분이 많을 것이라고 생각합니다.)

대개 서양의 철학에서는 어떠한 진리를 찾아가는 것이 흔한 반면에 동양의 철학이라는 것은(고대의 공자에서 현대의 리쩌허우에 이르기까지.) 일반적인 기준에서 말하는 "진리"라는 것을 부정하는 것을 덕목으로 여기며, 현실, 혹은 현상에 맞추어 가는 것을 올바르다고 여기는 것이었습니다. - 그럼에도 항상 변화한다는 원칙을 가지고 있다는 것, 그것 또한 어떠한 진리라 부를 수는 있기야 하겠습니다.
요컨대 일단의 서구철학에서는 근원을 파헤치는 것에 몰두하거나, 근원을 파헤칠 수 없음을 밝히는 것으로 사유를 종결짓거나, 혹은 근원 보다 의미있는 것에 힘쓰자는 여러 움직임이 있었던 것으로 알고 있습니다.
이것이 동양의 시각에서는, 간단히 말하자면 우리가 정하는 곳에서 그 시작이 된다 하고 있습니다.(지금 제 글에서, 동양은 동북아시아를 뜻하는 것이며, 역사적으로 동북아시아의 사상에서는 공맹정주/공맹육왕의 차이는 있었으나 큰 흐름에서 공맹의 유학이 지배적이었다는 것을 전제로 하고 있습니다.) 따라서 '어디까지가' 근원인지를 논하기 보담은 '무엇을' 근원으로 하여야 하는가가 주제가 되어 왔지요.
지금의 경우라면, 뒷문이 어디까지 심어졌는가를 볼 것이 아니라, 뒷문을 심어서 이득을 본 자에게 처벌과 배상을 하게 하자. 라는 논의를 했다고 보면 적절할 것 같습니다.

....
글을 쓰고 난 다음에, 이게 본문을 읽고 쓴 글이고, 나름 관련이 있다고는 생각을 하는데, 참 멀리 가는 것 같기도 하는 터라, 이걸 댓글 버튼을 눌러도 되는지 고민을 잠시 했습니다만, 딱히 나쁠 건 없겠지요?
절름발이이리
15/03/01 17:46
수정 아이콘
꾸르잼
15/03/02 18:26
수정 아이콘
전 요즘 랜덤여신님 글이 이해하기는 좀 어렵기는 한데(쉽게 풀어서 써주시지만 머리가 딸려 ㅠㅜ)
고수의 느낌이 물씬나서 몇번이고 탐독하게 됩니다.
시간나면 글 종종 부탁드립니다.

질문

저는 공알못입니다. 완전 무식한 질문이어도 이해를 부탁드립니다.

만약에 왼쪽이나 오른쪽으로 한바퀴 구르는 기계가 있다고 치면
그 기계는 2가지의 기능을 가진 것 아니겠습니까? 그럼 컴파일러도 딱 두개의 기계어만 번역할 줄 알면 되는 것 아닙니까?
그렇게 기능이 두 가지로 혹은 10000가지라도 물리적으로 딱 정해진 동작을 수행한다면 다 일일히 요건 요렇다 조건 조렇다 정해놓으면 되는데

소프트웨어라고 생각하면 골치가 아픕니다.
예를 들어서 22를 입력하면 "콩간지!!" 를 출력하게 만든다고 해봅시다.
출력을 할려면 "콩간지!!" 라는 단어를 출력하는 기능을 내장하고 있어야하지 않겠습니까?
근데 컴터 언어를 만드는 사람이 누가 "콩간지!!" 라는 단어를 출력하길 원할 줄 알고 그런 기능을 넣어놓습니까?
자유도가 너무 높아서 그 언어를 쓸 사람이 뭐를 할지 모르는데 어떻게 언어에 기능을 넣는걸까요...
언어 사용자는 그 프로그램으로 무엇을 할 수 있는지 어떻게 아나요...너무 궁금해요.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
58776 [일반] 개봉 박두...두근두근... [49] Neandertal7941 15/06/05 7941 13
57507 [일반] PDW? 개인 방어 화기? [11] 저퀴5884 15/04/12 5884 1
57355 [일반] 탈 퀄컴을 달성해낸 갤럭시 S6 구성 및, 중국 명칭 공개 [19] Leeka10342 15/04/03 10342 1
57266 [일반] 캠핑이 궁금하신 분들을 위한 어느 캠퍼의 안내서 (부제 : Q&A Best 10) [43] 제랄드9293 15/03/30 9293 34
56809 [일반] 믿음의 근원에 대하여 [11] 랜덤여신4724 15/03/01 4724 9
56523 [일반] 저의 스마트폰 변천사 주저리 주저리. [41] 콰이어트나이트5357 15/02/12 5357 1
56522 [일반] 미국 시장에서의 iOS vs Android... [28] Neandertal8361 15/02/12 8361 0
56467 [일반] 2014년 4Q, 스마트폰 이익의 93%를 애플이 달성. [119] Leeka9832 15/02/10 9832 1
56352 [일반] 갤럭시와 아이폰, OS 관련 여러가지 이야기들 [19] Leeka4525 15/02/04 4525 1
55699 [일반] 스마트폰 시장 ASP 지표가 공개되었습니다. [78] Leeka9260 14/12/30 9260 0
55638 [일반] 주말의 스마트 시장 이야기들 [18] Leeka6033 14/12/27 6033 0
55467 [일반] 2014 3Q, 삼성전자 판매량은 여전히 1위지만 하락세. [72] Leeka9293 14/12/16 9293 1
55157 [일반] 삼성 갤S4, 갤노트4 재부팅 이슈 및 기타 스마트 이야기 [13] Leeka6434 14/11/29 6434 0
54806 [일반] [스포] 시계덕후의 눈으로 본 인터스텔라 [21] 4층베란다18101 14/11/11 18101 4
54736 [일반] 아이폰6 대란의 결말 + 스마트폰 영업이익 이야기 [75] Leeka10146 14/11/06 10146 3
54711 [일반] 단통법 이후 뭔가 재미있는 현상 [112] swordfish-72만세10644 14/11/05 10644 0
54558 [일반] [킥스타터] 손바닥 PC [34] 메리프7014 14/10/28 7014 0
54261 [일반] 휴대폰 단말기 가격책정 문서가 공개되었습니다 [31] 노름꾼7983 14/10/13 7983 0
54106 [일반] [단통법] 보조금에 대하여 [51] 찌질한대인배6471 14/10/02 6471 1
54071 [일반] 단통법 찬성 의원 명단입니다. [79] 새강이15028 14/10/01 15028 0
54040 [일반] 갤럭시 노트4 프레임 유격 발생. [77] 종이사진9989 14/09/29 9989 1
54012 [일반] [펌] 단통법, 위약4, 유심기변제한 총 정리 글 [109] Duvet21318 14/09/28 21318 6
53987 [일반] 불금기념 심심해서 써보는 새로나온 홍석천 라면 리뷰 [28] hola2678817 14/09/26 8817 1
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로