수퍼해커의 해킹비밀 3
로빈아빠
본문
이 책을 집필하는데 사용했던 자료 중 하나는 인기 있는 상용정보 서비스에 대한 비공식 매뉴얼이다. 여성인 저자는 책의 구석구석에서 그녀의 얘완동물인 고양이, 좋아하는 필라델피아의 부드러운 비스킷, 응원하던 미식 축구팀, 자기 남편과 아이들, 그리고 최근에 흥미를 가진 컴퓨터 분야에 관해 자주 언급하였다. 내용 중 언급된 그녀의 생활 습관에서뿐만 아니라 서비스의 'Find'명령어를 설명하면서 예를 적어 놓은 메시지와 출력 문자에까지 이런 인용들은 빠지지 않고 등장하였다. 물론 나는 그 저자의 이름을 알고 있다. 그녀가 그 서비스의 회원이라는 사실을 알고 있었으며 그녀의 삶에 관해서도 알고 있었다. 이런 상태에서 그녀의 개인 ID와 비밀번호를 알아내는 건 아주 쉬운 일이었고, 20번 정도의 시도 끝에 그녀의 계정으로 시스템에 접근하는 데 성공했다. 후에 그녀는 내 조언을 받아들여 비밀번호를 변경하였다. 이것이 유일한 예는 아니다. 우리가 매일 읽는 신문이나 잡지 기사, 책에서 저자는 독자들이 문의할 수 있도록 자신의 컴퓨터 계정을 알려준다. 어제 내가 들었던 라디오 토크쇼의 진행자는 방송에서 발언할 기회가 없는 수많은 청취자들을 위해 자신의 컴퓨터 서브 주소를 이야기했다. 우리는 그런 사람이나 저자에 관해 많이 알고 있어 그들의 비밀번호를 충분히 예측할 수 있다, 저자가 본문에선 개인적인 사항에 관해 언급하지 않는다 하더라도 '저자 소개' 부분을 찾아보면 그 사람에 대해 쉽게 알 수 있다. 많은 컴퓨터 관련서가 대학교수에 의해 쓰여진 관계로, 당연히 그 교수가 어느 대학에 있는지를 알게 되고, 이로써 당신은 또 한 계정으로 가는 길에 알게 된 것이다. 만일 책에 포함된 샘플 프로그램이 야구 신기록에 대한 내용이라면, 당신은 어느 부분을 먼저 공략해야 하는지에 대한 좋은 정보를 얻은 것이다. 지금까지 내가 말한 것은 단지 당신에게 정보를 제공하기 위해 서임을 알아주기 바란다. 위에 언급한 사항은 대중 앞에서 보안에 느슨해진 사람들에 관한 지적일 뿐이다. 이걸 응용한답시고 나의 비밀번호를 알아내기 위해 어떤 흉계를 꾸미지 말기를 바란다. 또 다른 방법은 인명록(Who's who book)을 참고하는 것이다. 거의 모든 기업체에서는 매년 인명록을 출판한다. 대부분의 인명록은 허영심의 산물이다. 사람들은 이런 인명록에 이름을 올리기 위해 돈을 쓴다. 당신은 여기서 유용한 정보를 얻을 수 있으며, 얻은 정보가 충분치 않다고 생각되면 가짜 인명록 등록 용지를 만들어서 기업체에 있는 사람에게 보내라. 편지를 보낼 때는 설명서를 첨부하여 양식을 전부 작성하여 보내 준다면 인명록에 무료로 게재하고, 그 책을 한 권 보내 주겠다는 말을 덧붙여라. 이러면 그들은 틀림없이 그 양식으로 답장을 보낼 것이고, 당신은 비밀번호를 알아내는 데 유용한 정보를 얻을 수 있을 것이다. 또 한 가지 유용한 방법을 그 기업체 사람들과 친해 두는 것이다. 그 사무실에 전화를 걸어 내부 사람들의 시시콜콜한 일까지 다 알고 있는 접수원이나 그 밖의 사람들과 이야기를 나누어라. 소개할 떼는 이 업계를 전문으로 취급하는 새로운 잡지사에서 왔다고 자신을 소개하라. 그리고는 무료 정기구독권을 보내 주기 위해서라며 각 부서의 책임자와 그들의 비서 이름을 물어 보아라. 다음에는 비서에게 전화를 걸어 얘기를 나누어라. 무료 정기구독권이나 시계 겸용 라디오, 기타 다른 경품들이 걸려 있다고 말하면서 그들에게 '시장조사' 카드를 작성해 달라고 요청하라. 직업 잡지에서 실시하는 일반적인 시장조사에 포함된 질문 내용은 응답자의 학력, 직급, 상벌, 노조 가입 여부, 병역, 급여 정도, 회사에서의 근무 경력 등이 있다. 대화를 계속하면서 취미나 관심사, 좋아하는 운동, 자식이나 배우자의 이름, 집 주소 등을 물어 보라. 이런 질문 역시 시장 조사자들이 물어 보기에 적당한 질문들이다. 그리고 여기서 얻은 답변은 비밀번호를 알아내는 데 유용하게 사용될 수 있다. 이런 방법은 더 간단하게 줄일 수 있다. 우선 전화를 걸어 자기는 직업 잡지의 편집자 보조이며 흥미있는 기사를 제공할 만한 사람을 찾고 있다고 이야기한다. "아주 특별한 일을 하고 있거나 색다른 취미를 가진 사람을 아십니까?" 당신은 보통 "아니오"라는 대답을 들을 것이다. 하지만 질문을 계속해 보라. "특별히 재주를 가진 사람은 없습니까? 예를 들어 음악적 재능 같은 거 말입니다." 이런 식으로 계속 질문하라. 질문하다 보면 우연찮게 알게 되는 사실이 있기 마련이고, 이러면서 위에 사용했던 방법을 이용하여 당신은 생각했던 것 이상으로 그 사람에 관해 많은 정보를 얻을 수 있다. 목표 대상의 관심 분야를 알아내는 것은 그 사람이 프로필, 특히 해커에겐 비밀번호에 관한 프로필을 작성하는 행위라 할 수 있다. 해킹하기 원하는 컴퓨터 시스템을 소유한 특정 개인을 목표로 할 때는 언제든지 이 기술이 사용된다. 만일 당신이 어떤 기업체 사장의 전자우편을 읽거나 다른 개인 파일을 원한다면 먼저 대중 매체에서 그 사장을 평가한 자료를 찾아보고 그 사람이 무엇을 좋아하는지 등에 관한 것들을 알아보는 것부터 시작해야 한다. '해커의 핸드북(Hacker's Handbook)'이라는 책을 저술한 휴고 콘월(Hugo Cornwall)이 언급했던 유명한 전략은 다음과 같은 사실을 상기시킨다. 조직의 대표는 너무 바빠서 직접 새로운 계정을 만들기가 어렵고 시간도 많이 빼앗긴다는 전제하에서 보통 새로운 컴퓨터 시스템을 보여주는 계정이 주어진다는 것이다. 이 계정은 보통 영문 비밀번호를 가지고 있을 것이며 추측하기 쉬운 종류이거나 사용자인 대표의 관심 분야 중 하나일 것이다("라센씨는 낚시를 좋아하쟎아, 그렇지 않니? 그럼 비밀번호로 ' FISH'를 입력해봐!"). 당신이 어떤 사람의 취미나 관심사를 알고 있다고 가정해 보자. 이 상태에서 어떻게 일을 진행시킬 것인가? 시작을 위해 당신은 도서관에서 그 주제에 관련된 모든 서적을 구해 볼 수 있다. 그리고 나서 용어 해설집과 색인 란을 참조하여 단어 사전(word bank)을 만들 것이다. 사람들은 자신이 좋아하는 분야에서 누구도 생각하지 못했던 길고(그들 생각으로는) 난해하기 이를 데 없는 이름, 단어를 사용하길 좋아한다. 그런 관계로 문학 전공 학생들은 보통 사용에 혼란을 일으키는 'Euripides', 'Aeschylus' 같은 길고 전문적인 용어를 비밀번호로 사용하곤 한다. 단어 목록을 만들어 비밀번호에 적용시켜 보라. 만약 모두 실패 하더라도 당신은 새로운 비밀번호 형태를 생각할 수 있을 것이다. 단지 의사이기 때문에 그 사람의 비밀번호가 'pericardiocentesis'가 될 이유는 없다. 사람들의 인생은 많은 문제에 둘러싸여 있고 그들의 직업은 그 중 하나일 뿐이다.비밀번호 연구만일 쉽게 추측할 수 있는 비밀번호에 관한 이 모든 이야기를 헛소리라고 생각한다면, 다시 한번 생각해 보기 바란다. 사람들이 얼마나 안전한 비밀번호를 선택하고 있는지를 알아보기 위한 공식적, 혹은 비공식적인 연구가 많이 있었다. 한 실험에서 3,289개의 비밀번호가 분석되었다. 15개는 하나의 아스키(ASCLL)문자였다. 72개는 두 글자였다. 464개는 세 글자였다. 477개는 네 글자였다. 706개는 다섯 글자였으며 전부 대문자, 소문자 중 하나로만 구성되어 있었다. 605개는 여섯 글자였고 전부 소문자였다. 결론은 이렇다. 해커가 책상에 앉아 손쉽게 비밀번호를 추측하는 것은 '사실'이지 '허구'가 아니다. 비밀번호는 결국엔 밝혀진 것이며 때때로 아주 쉽게 알아내기도 한다. 비밀번호를 쉽게 해킹한 또 하나의 예는 1988년 인터넷을 누비고 다니며 네트워크의 상당 부분을 망가뜨린 인터넷 웜 프로그램이다. 그 윔은 스스로 증식하는 데 두 가지 방법을 사용하였는데, 그 중 하나는 사용자의 비밀번호를 깨뜨리려고 시도하는 것이었다. 먼저 그 윔은 접속명, 사용자의 성이나 이름, 혹은 이것들의 변형과 같은 전형적인 비밀번호들을 입력해 보았다. 이 방법이 성공하지 못하면 웜은 내부 사전에 기억된 432개의 평범한 비밀번호들을 대입해 보았다. 두 방법이 모두 실패하면 웜은 유닉스(UNIX)시스템 사전에 있는 단어를 뭔가 통할 때까지 하나하나 입력해 보았다. 알다시피 이 방법은 놀라운 성과를 거두었다. 그런데 당신이 유닉스 시스템 상에서 한층 더 높은 사용 권한을 얻기 위해 정공법을 써야 한다면 시스템 사전이 매우 유용할 것이다. 그 사전은 '/usr/dict'고 불리는 서브디렉토리 안에서 찾을 수 있다. 그 파일은 'words'라고 불린다. 만약 당신이 다른 기계에서 사용할 쉬운 말 사전 파일이 필요하다면, 이 파일을 다른 컴퓨터로 다운 받거나 캡처할 수도 있다. 비밀번호에 대한 제약대부분의 운영체제는 안전을 최우선으로 제작되지 않았다. 그래서 시간 공유 시스템(time sharing system)의 보안을 위한 장치로는 비밀번호가 있는 계정을 사용하는 게 고작이다. 하지만 보아 왔듯이 사용되는 대부분의 비밀번호는 너무 쉽게 추측할 수가 있다. 그래서 유닉스 운영체제에서는 비밀번호 선택시 소문자가 다섯 자 이하로는 포함되지 못하게 하거나, 적어도 알파벳 문자가 아닌 글자나 대문자가 한 글자는 들어가도록 하면서 소문자의 선택을 네 자 이상으로 제한하고 있다. 하지만 시스템 보안을 강화하기 위한 이 방편을 무시하고 사용자가 더 짧은 비밀번호를 고집한다면 그 사용자의 요구는 받아들여진다. 시스템 운영자들은 안전하지 못한 비밀번호를 대부분 알고 있고, 그래서 대개 시스템에는 너무 쉬운 비밀번호의 생성을 거부하는 프로그램이 설치되어 있다. 그리고 비밀번호 선택시 다음과 같은 특징을 수용하도록 되어 있다. 비밀번호는 반드시 어느 정도 길이를 유지해야 한다. 비밀번호는 반드시 대문자, 소문자를 혼합해서 만들어야 한다. 비밀번호는 반드시 하나 이상의 숫자를 포함해야 한다. 비밀번호는 반드시 알파벳이 아닌 기호를 포함해야 한다. 비밀번호 선택시 위에 나열된 조건을 하나 이상을 수용하도록 규정되어 있다. 그리고 보안 프로그램은 새로 생성된 비밀번호를 사용이 금지된 '해킹 당하기 쉬운' 비밀번호 목록과 대조해 본다. 대문자, 소문자 한 가지만으로 된 비밀번호나 알파벳만으로 이루어진 비밀번호의 선택을 불허함으로써 비밀번호 추측 작업이 더 힘들게 되기는 했지만, 그리 심하지는 않다. 뽀빠이에 관한 고전 만화책을 많이 가지고 있고 뽀빠이에 관한 완구를 만드는 데 많은 시간을 할애하기 때문에 'popeye'라는 비밀번호를 사용할 것이라고 짐작되는 사람이 있었다. 시스템 소프트웨어가 대문자, 소문자를 구별한 비밀번호를 요구하기 때문에(이처럼 시스템이 대문자, 소문자의 구별을 요구한다는 사실을 알면 도움이 된다) 나는 'popeye'라고 입력하지 않고 다음과 같은 단어들을 입력했다. Popeye PoPeYe popeyE PopEye popEYE popEyE PopeyE PopEYE PoPeye 그리고 위에 나열된 단어들의 대소 문자를 바꾸어가며 각각 입력해 보았다. 예를 들어 PopeyE를 pOPEYe와 같이 말이다(이렇게 입력했던 이유는 키보드 입력시 대문자를 주고 사용하고 소문자를 잘 사용하지 않는 사용자가 있을 경우를 대비해서였다). 이 뽀빠이광은 중간 음절에 대문자를 놓아 두거나 어떤 패턴을 가진 이상한 비밀번호를 만들지는 않았을 것 같았다. 게다가 대문자를 넣으라고 강요받았을 때 누가 고분고분 따르고 싶어하겠는가? 후에 그 사람의 비밀번호는 'OliveOyl'(뽀빠이 시리즈의 여주인공)로 밝혀졌다. 대문자가 아니라면 처음 접속시에 비밀번호에 숫자를 포함하도록 규정되어 있을 수 있다. 이때도 일반 사용자가 음절 중간에 숫자를 넣지는 않을 것이며, 사용되는 숫자는 하나나 둘을 넘지 않을 것이다. 결국 사용자는 단어를 비밀번호라고 생각한다. 숫자는 일반적으로 추후에 끼워 넣어질 것이다. 그래서 보통 다음과 같은 형태의 비밀번호를 보게 될 것이다. password# pass#word #password 숫자는 보통 1이나 0같이 기억하기 쉽거나 타이핑하기 쉬운 것이 사용될 것이다. 0에서 31까지의 숫자와 '888', '500' 혹은 '1999'같이 0에서 9까지의 숫자를 반복해서 쓴 것들이 가장 일반적으로 사용된다. 타이피스트들은 일반적으로 비밀번호에 'l'(소문자 'L')이 들어 있으면 숫자 '1'을 대신 사용한다. 사이버스페이스 신봉자 역시 숫자가 꼭 필요하다면 영문자 'O'대신에 '0'을 넣는 방법을 자주 사용한다. 이것은 만일 'cool', 'computer', 'lucifer', 'lemon', 'colt'와 같이 'L'이나 'O'가 들어간 단어들을 찾으려고 한다면 'c001', 'c0mputer', 'lucifer', 'lem0n', 'c0lts'같이 1이나 0으로 대체 된 단어들을 찾아야 한다는 뜻이다(실제로 'c001'은 보통 'k001'로 표시된다).컴퓨터가 만든 비밀번호: 기계가 만든 비밀번호의 속임수와 분석컴퓨터가 스스로 만드는 많은 비밀번호들에는 임의성이 있을 것이다. 예를 들어, 다음과 같은 가상 프로그램의 일부를 보아라.5 Randomize Timer100 For I=1 to 6 [6글자 동안 반복시킨다.]110 Char = int ( Rme * 91) [Rme는 컴퓨터 내부의 난수 발생 장치로부터 발생된 실수 수치이다]120 if Char < 65 Then Goto 110 [대문자가 아니면 다시 한 번 난수 발생 과정을 거친다.]130 Password = Password + Chr$(Char) [만들어진 글자를 이미 만들어진 글자 뒤에 덧붙인다.]140 Next I200 Print "Your new password is:";Password여기서는 여섯 개의 대문자가 따로따로 선택된 후 연결되어 비밀번호를 만든다. 그 문자들이 선택되는 방법은 우선 65부터 90사이의 임의의 숫자가 선택되는 것이다. 이 숫자는 알파벳 대문자들에 대응하는 아스키 코드와 관련이 있다. 선택되는 숫자의 임의성은 사용된 무작위수 발생 함수에 기반을 두고 있다. 무작위 난수 추출은 하드웨어에 의존한 무한대의 입력에 근거할 수도 있지만, 여기서는 컴퓨터 내장 시계의 정확한 시간에 근거하여 '거짓' 난수들이 생성된다. 내가 '거짓' 난수라고 표현한 이유는 이 숫자들이 아무리 임의적인 것으로 보이더라도 컴퓨터에게는 그 숫자들이 일정한 공식에 대입되는 정당한 값이기 때문이다. 만일 비밀번호 제작 프로그램을 제대로 조작할 수 있다면, 조작이 끝난 후 만들어진 무작위의 비밀번호는 전부 예측 가능한 것이 될 것이다. 만일 당신이 프로그램을 조작하여 디스크에 저장하거나 비밀번호 제작 서브루틴을 수정할 능력이 있다면 여기 몇 가지 더 고려해야 할 사항이 있다. 부팅을 변경하는 가장 쉬운 방법은 프로그램 내의 무작위 요소를 전부 제거하고 "Let Password$ = "EVBDCL8"" 라는 문장을 삽입하는 것이다. 이렇게 하면 새로운 사용자는 모두 같은 비밀번호를 받게 된다. 문제는 이런 일은 시스템 운영자에게 발각될 것이 뻔하다는 점이다. 물론 당신이 조작해 놓은 것이 발견되기 이전에 원래의 프로그램으로 돌려놓을 수 있을 수도 있겠지만. 좀더 논리적인 선택은 생일 날짜, 사회 보장 번호 같이 쉽게 구할 수 있는 사용자에 관한 공개적인 자료를 기반으로 해서 무작위 비밀번호 발생 프로그램을 만드는 것이다. 그렇게 하면 당신은 집에 있는 개인용 컴퓨터에 저장되어 있는 프로그램의 복사본에서 쉽게 사용자에 관한 정보를 뽑아내 새로운 사용자의 비밀번호를 다시 만들 수 있다. 효과적으로 알고리즘을 구성할 수 있는 한 가지 방법은 사용자 이름의 앞 6글자 내지는 8글자를 택해 각 아스키 값의 사인 값을 취하고, 그 값의 끝에서 두 번째와 세 번째 숫자를 선택하여 적당한 범위 안에 떨어지도록하여 그것을 변환한 후 '단어' 모양이 되도록 숫자와 일치하는 아스키 문자로 바꾸는 것이다. 이렇게 하면 당신은 손쉽게, 심지어는 수동으로도 가능한 무작위 비밀번호를 만들 수 있다. 만일 사용자의 이름이 6자 이하라면 모자라는 부분은 미리 정해 놓은 것으로 채워 넣을 수 있다. 이것은 단순한 예에 지나지 않는다. 당신의 비밀번호는 대문자, 소문자를 섞어 넣거나 일정 길이를 유지하며, 혹은 숫자를 혼합해 구성하라는 요구에 합치하여야 할 것이다. 이런 방법으로 비밀번호를 '강요'하는 것은 당신이 전자우편함이나 BBS를 운영하는 경우에 도움이 될 수 있다. 사용자는 이 안전한 새 비밀번호에 대해 편안하게 느끼고 다른 계정에도 이 비밀번호를 사용할지도 모른다. 위와 마찬가지고 비밀번호 발생기를 몰래 변경할 수 있는 또 다른 방법은, 난수 발생시 사용되는 초기치를 일정한 값으로 고정시키는 것인데, 이렇게 하면 난수 발생기는 매번 실행될 때마다 동일한 난수를 연속으로 산출한다(컴퓨터가 계속 켜져 있고 프로그램이 리셋되지 않는 한). 하지만 이것은 위험하고, 예상치 못한 부작용이 생길 수도 있다. 가상 난수 발생기(Pseudo-random number generator)의 결점을 이용한 한 방법이 실제로 실행되었고, 1986년 유닉스의 공동 제작자인 데니스 리치에 의해 '유닉스의 보안에 관하여(On the Security of UNIX)'라는 제목으로 보안용 게시판에 보고되었다. 컴퓨터 장치의 보안을 확고히 하기 위해 관리자는 컴퓨터가 발생시키는 안전한 비밀번호를 제공하기로 결정했다. 각각의 비밀번호는 소문자나 숫자고 구성된 8자의 문자열 형태로 제공되었다. 이 방법으로는 2,821,109,900,000개의 암호가 만들어질 거라고 추정되었는데, 치리에 따르면 무조건 소문자와 숫자를 조합하여 가능한 비밀번호를 추정하는 데 PDP 11/70으로도 112년이 걸린다는 것이었다. 그러나 해커는 그 난수 발생기가 단지 32,768개의 초기치만을 사용한다는 사실과, 따라서 초기치에서 발생되는 결과치의 개수만큼만 시도해 보면 된다는 것을 알고 있었다. "사실 그 나쁜 녀석은 각각의 초기치가 만들어 낸 비밀번호 문자열을 테스트하여 시스템이 발생시키는 모든 비밀번호를 찾아내는 데 단 1분도 걸리지 않았다." 시스템에 있는 모든 계정에 접근하는 데 약간의 프로그래밍 시간과 60초의 시간이 걸린다면 분명 투자할 가치가 있는 것이다. 만일 시스템이 비밀번호를 생성하는 도중에 개입할 수 없다면, 당신은 그것이 만들어진 후 분석할 수 있을 것이다. 이때는 주어진 시스템에서 최소한 하나, 가능하다면 둘 또는 그 이상의 비밀번호를 알고 있어야 가능하다. 합법적인 계정을 가지고 있다면, 당신 계정의 비밀번호가 첫 번째 것이 된다. 만일 그 계정이 해킹을 목표로 한 지역 BBS의 것이거나, 익명으로 복수 접속이 가능한 종류의 시스템의 계정이라면, 여러 번 접속하여 각기 다른 사용자명으로 접속이 가능한 비밀번호를 알아내라. 아니면 BBS 호스트 프로그램이나 비밀번호 발생 루틴을 입수하여, 그것을 여러 비밀번호를 알아내는 데 사용하라. 한번은 새로 개설되는 몇몇 BBS를 조사하다가, 몇 개의 주를 사이에 둔 거리이긴 하지만 접속을 시도할 만한 가치가 있는 시스템의 광고를 우연히 보게 되었다. 나는 전화를 걸어, 새로운 사용자의 자격으로 접속했으나 흥미 있는 것은 전혀 없었다. 그곳은 공장 관리자가 각 지부로부터 재고 요청을 받는 데 사용하는 장소였다. 접속을 위해 거짓으로 입력한 이름과 주소는 'Roger Eichner, 13 Sterm Court, North Coast, WA64203'였는데, 이에 생성된 비밀번호는 'roghner24'였다. 처음엔 깜짝 놀랐다! 분명 이 프로그램은 내 이름의 처음 3자, 성의 마지막 4글자를 취하고 끝에 숫자를 붙여 비밀번호를 만든 것이기 때문이었다. 하지만 진짜 그럴까? 그래서 나는 두 번째로 전화를 걸어, 다른 사용자 명으로 접속했다. 이번에 생성된 비밀번호는 내가 준 어떤 개인 정보와도 연관이 없는 것 같았다. 이렇게 되니 놀라운 뿐만 아니라 혼란스럽기까지 했다! 첫 번째 암호는 단순한 우연이었을까? 아니면 두 번째가 우연이였을까? 단지 때때로 사용자 명을 사용하도록 프로그래밍된 것이었을까? 나는 세 번째로 전화를 걸어 새로운 사용자 명으로 다시 접속했다. 또다시 비밀번호는 내가 입력한 것과는 아무런 연관이 없었다. 이제 그 첫 번째 암호가 단지 개의치 않아도 좋을 우연의 일치라고 확신한다. 나는 시스템 운영자에게 메일을 보내 내가 접속한 3명의 새로운 사용자를 지우라고 말했다(농담을 하고 있다고 생각되지 않도록 각각의 사용자에 대한 개인 정보도 제공했다). 그리고는 몇 주 동안 접속하지 않았다. 비록 두 번째와 세 번째의 비밀번호가 서로 관련이 없고 나의 개인 데이터와도 관련이 없었지만, 나는 처음 접속할 때 뭔가 놓쳤다는 생각이 들었다. 왜냐하면 몇 개의 문자들이 비밀번호 생성시마다 반복되었기 때문이다. 이 문자들은 내가 사용하는 모뎀의 전송 속도, 컴퓨터 종류, 또는 첫 접속에서 다음 접속시까지 지속되는 다른 어떤 파라미터를 언급하는 것이 아닐까? 혹은 비밀번호를 만드는 데 발췌하는 부분이 무작위로 선택되는 것이었을까? 만일 이런 방식이라면 처음엔 사용자 명이 사용된 것이고, 다음 접속 시엔 다른 자료가 사용된 것이 된다(이때 비밀번호와 개인 자료의 연관성을 내가 눈치채지 못한 것이다). 그래서 처음 접속할 때와 똑같은 사용자명, 주소, 터미널 특성, 기타 개인 자료를 입력하여 접속했을 때, 실망스럽게도 내가 받은건 컴퓨터가 임의로 생성한 비밀번호가 아니라 다음과 같은 의외의 메시지였다. 친애하는 회원에게 새 비밀번호로 등록하시라는 통지에 대해 사과 드립니다. 그러나 지난 며칠간 몇 가지 문제가 있었습니다. 당신 신원이 확인될 때까지 시스템 접근이 금지된 것을 감수하시기 바랍니다. 새로 비밀번호를 입력할 때 이전에 받은 것을 입력하지 마십시오. 이전 것과는 전혀 다른 새 비밀번호를 만드시기 바랍니다. 설명을 원하신다면 일반 공지 사항 #1번을 참고하십시오. StRaPmAsTeR ===wllLiE ===>(sysop) Input Password===>?일반 공지사항 1번에는 비교적 최근에 Mr.Joke라는 이름의 BBS사용자가 호스트 프로그램의 특정 기능을 이용하여 보안이 용이하지 않은 비밀번호를 만들어 냈다고 적혀 있었다. 그 전년도에는 '시스템이 Mr.Joke가 파일 영역으로 업로드한 것이 분명한 파괴 프로그램에 의해 망가졌다'고 나와 있었다. 시스템을 자주 사용하는 사용자는 알고 있는 이야기라면 고장의 원인이나 성질에 대한 상세한 자료는 제시되지 않았다. 어쨌든 이젠 어떤 방법으로 '난수적인' 암호를 분석함으로써 몇몇 좋은 자료를 얻는 것이 가능한지를 알 수 있을 것이다. 비록 당장에는 인식 가능한 일정 패턴이 없어 보인다 하더라도, 숨겨진 패턴이 전혀 존재하지 않는다는 뜻은 아니다. 교묘히 숨겨진 패턴이 있을 수도 있고, 패턴이 아니라도 이용 가능한 버그나 오류가 있을지도 모른다. 예를 들어 어떤 BBS 프로그램의 초기 버전에서는-프로그램 성능이 좋지 않아 한 달 후 그 BBS가 망할 정도였다-무작위 비밀번호 생성기가 문자 A나 숫자 0이 들어가는 비밀번호를 결코 만들지 않았다. 다음을 알고 있는 것은 약간의 도움이 된다. WXYZ는 한 벌의 문자이고 123은 숫자인데(시스템이 A와 0이 들어간 비밀번호를 만들지 않는다는), 위의 경우를 알고 있다면 가능한 문자와 숫자의 조합은 456,976,000개에서 284,765,630개로 줄어든다. 자그마치 172,210,370개의 차이가 나는 것이다! 이렇듯 이 소프트웨어는 버그 투성이였고, 역사상 가장 끔찍한 프로그래밍 실수로 유명해졌다.컴퓨터가 만드는 무작위가 아닌 비밀번호마지막으로 무작위가 아닌 기계 생성 비밀번호에 대해 생각해보자. 종종 사용자는 정식 접속 절차를 밟지 않고 컴퓨터 시스템에 들어가곤 한다. 이 경우 운영자가 오프라인(off-line) 상에서 비밀번호 작성시의 주의 사항을 알려줄 수 없다면, 일시적으로 사용되는 비밀번호는 사회 보장 번호(SSN)나, 생일 날짜, 또는 기타 개인적인 기념일처럼 사용자가 이미 알고 있는 것으로 만들어지기 마련이다. 사용자는 쉽게 추측이 가능한 이런 비밀번호를 더 안전한 것으로 바꾸게 되어 있으나, 변경 방법을 알려주지 않거나 변경 요구를 받지 않는다면 쉽게 변경하지 않을 것이다. 여기 이런 약점을 보여주는 컴퓨터와 관련 없는 예가 있다. 1992년 4월, 뉴저지 대학의 학생들은 새롭게 전화로 수강 신청을 하는 과정을 알려주는 통신물을 받았다. 그 통신물에는 등록을 증명할 개인 접속 코드(Personal Access Code, PAC)로 앞의 4자리 숫자는 생일(월과 일)을, 나머지 9자리 숫자는 학생의 ID번호(사회 보장 번호)를 입력하라고 적혀 있었다. 우선 기가 막혔던 사실은 학생들에게 최고 기밀에 해당되는 개인접속코드로 자신의 생일을 입력하라고 한 것이었다. 이것은 지켜야 할 보안 예방 조치를 어긴 것이다. 다른 사람의 생일을 아는 것은 얼마나 쉬운 일인가? 개인 접속 코드는 반쪼라기 '비밀번호'이고 나머지 부분은 학번이다. 학번은 학생건강센터나 컴퓨터실 출입 대장, 신분증, 출석부, 주소록 같은 데서 공공연하게 사용되는 것이다. 통신물에는 보안이 염려되는 사람은 등록 사무실로 와서 개인 접속 코드를 변경하라고 쓰여 있지만, 누가 그렇게 하기 위해 귀찮은 절차를 거치겠는가? 단지 4개의 숫자를 바꾸는 것은 해킹을 결심한 해커에겐 아무런 장애가 되지 않는다. 개인 접속 코드를 변경했다 하더라도, 10,000번 시도하면 한번 정도는 성공할 가능성이 있다. 이것은 보안 의식이 투철한 사람이 개인 접속 코드를 바꾸기 전에는 366번만 시도해보면 되는 것에 비해서 큰 수치이다. 물론 10,000번은 시도하기에 많은 수치이긴 하지만 불가능한 수치는 아니다. 버튼식 자동 전화기(Touch-tone auto-dialer)를 사용하여 한 통화로 무제한의 시도가 가능하다면, 모든 개인 접속 코드 조합은 약 7분이면 시도해 볼 수 있다. 난 이 이야기를 통해 다음과 같은 최소 저항의 원칙을 분명히 하려고 한다. 사용자는 꼭 해야 할 필요가 없다면, 접속 코드를 고치려고 하지 않는다. 그리고 고친다 하더라도 문제가 되지 않는다. 결국 우리는 '해커'이다. 컴퓨터가 만드는 무작위가 아닌 비밀번호, 아니 그보다는 프로그래머나 시스템 관리자가 결정하거나 컴퓨터가 데이터 파일 중에서 선택하는 비밀번호에 관한 논의로 되돌아가자. 많은 수의 비밀번호가 한꺼번에 필요한 경우, 컴퓨터가 비밀번호를 선택하게 된다. 학기가 시작되는 첫 주에는 컴퓨터 강좌에 등록된 학생들을 위한 수천 개의 계정이 만들어진다. 대부분의 경우, 이 계정에 사용되는 사용자 명은 진짜 이름에서 일부를 잘라 내거나 뒤섞은 것이 될 것이며, 비밀번호는 사회 보장 번호나 학번이 될 것이다. 그러므로 대학 시스템을 해킹하기 원한다면, 학기 초에 시작하라. 이렇게 쉽게 만들어진 비밀번호들이 사용자에 의해 좀더 안전한 형태로 바뀌기 전에 말이다. 사회 보장 번호 같은 것은 정공법을 이용해 쉽게 해킹할 수 있고, 특히 그것이 어떻게 할당되는지 알고 있을 때, 더욱 손쉽게 할 수 있다. 사회 보장 번호(또는 다른 ID 번호)는 다른 사회적 방법을 통하거나(사회공학에 대한 장을 참조하라), 다른 형태의 구실을 통해 알아낼 수 있다. 한번은 대학 강의실에 앉아 있는데, 그 때 강사는 학생들에게 이름과 학번을 적어 제출할 종이를 나누어주고 있었다. 이 종이는 작성 후 조교에게 넘겨졌고, 조교는 이 정보를 컴퓨터 시스템 계정에 입력하였다. 만일 이와 같은 작업이 진행되고 있는 강의실을 우연히 발견했다면, 강의실의 뒤에 앉아라. 그러면 아무도 당신이 타인의 개인 정보를 복사하는 것을 눈치채지 못할 것이다. 휴대형 스캐너나 복사기가 있다면 작업을 훨씬 더 손쉽게 진행할 수 있을 것이다. 또한 이름이나 사회 보장 번호는 강의를 듣는 각 개인에 관한 정보가 기록되어 있는 출석부나 수업일지 같은 데서 알아낼 수 있다. 만일 교수가 이 명부를 학생들이 열람하지 못하게 한다면, 적당한 구실을 붙여 몰래 훔쳐보도록 하라. 예를 들어, 학적 계원이 자기 이름을 성적증명서에 잘못 기입했다고 하면서 그것이 고쳐졌는지 확인하고 싶다고 말하라. 교수는 학교 운영에 대한 관료주의의 잘못을 지적하는 것이면 어떠한 핑계라도 받아들일 것이다. 관료주의에 대한 교수들의 반감을 이용하도록 하라. 몇몇 법정 투쟁의 결과, 개인의 사회 보장 번호를 이름과 함께 공개적 환경에서 사용하는 것은, 개인 사생활에 대한 침해로서 헌법위반이라고 규정되어 있다. 그러므로 사회 보장 번호가 신원 확인의 목적으로 사용되는 일은 점점 줄어들 것이며, 대신 조직에서 규정한 ID 번호가 그 위치를 대신할 것이다. 그렇다면 개인에게 할당된 ID 번호에 접근하기 위해 정공법에 점점 더 의존해야 할 것이다. 임시로 사용되는 비밀번호로 항상 사회 보장 번호나 여타 ID 번호가 쓰이는 것은 아니다. 만일 컴퓨터를 통하지 않고 시스템 관리자와 사용자간의 통신이 가능하다면, 다른 단어들이 일시적인 암호(사용자가 접속하는 때에 변경되는)로 할당될 수도 있다. 모든 계정에 주어지는 포괄적인 '새로운 사용자' 비밀번호가 있을 수도 있다. 이것은 해독하기가 그리 힘들지 않을 것이다. 혹은 그 비밀번호가 무작위 철자로 이루어진 긴 문자열 같이 의미가 모호하고 보안에 신경 쓴 것일 수도 있다. 이때는 그 새로운 사용자의 편지함에 직접 가서 할당된 비밀번호가 들어 있는 편지 봉투를 가로채야 할 필요가 있을 것이다. 프로그램도 사람과 같다. 컴퓨터 시스템이 시스템의 사용자처럼 사용자 이름과 비밀번호를 가진 프로그램으로 셋업되어 있는 경우가 있다. 그리하여 그 프로그램의 사용자 이름과 비밀번호를 입력하면 그 프로그램이 자동으로 실행된다. 그러한 프로그램은 네트워크, 정보 시스템, 데이터베이스, 메시지 시스템 등을 사용하는 방법을 가르쳐 주는 개인 학습용이거나, 어떤 종류의 응용 프로그램뿐일 수도 있다. 또한 몇몇 사이트에서는 사용자 명이 'time', 'date' 또는 'who'(이것은 현재 누가 시스템을 사용하고 있는지를 알려준다)와 같은 기본 명령어인 계정을 가지고 있다. 이것은 빠른 접속을 위해 어떤 편법을 쓰지 않아도 신속하게 접속할 수 있게 해준다. 종종 이런 명령어의 입력이 가능한 계정은 비밀번호를 가지고 있지 않는데, 여기서 사용되는 많은 명령어들이 수퍼 사용자만이 사용 가능한 경우도 있으므로 아이러니컬한 일이다. 당신은 다음과 같은 단어들로 조합된 이름, 비밀번호를 가진 프로그램 사용자 중 하나에 들어갈 수도 있을 것이다. guest demo help info tutorial tut menu data base intro anonymous database visit welcome hello 예를 들면 'Visitor'가 사용자 명일 수 있고, 'tut'가 비밀번호일 수 있다. 다른 방법은 'calendar', 'cal', 'sched', 'schedule', 'whois', 'ftp', 'who', 'lpq', 'archie'또는 다른 일반적인 명령어 이름을 사용자 명으로 입력해 보는 것이다. 많은 시스템들이 일반 사용 셋업이나 공공 정보 시스템 셋업을 가지고 있을 것이다. 위에 제시한 'info' 같은 것으로 접속하여 접근할 수도 있겠지만 다른 변형도 가능하다. 예를 들어 Wakka Doo 대학이이라면 'wdo', 'wduinfo', 'hellow', 'wdunews', 'wdumail', 'welcomew' 같은 대학 머리 글자의 변형인 사용자 명의 입력을 요구할지도 모른다. 이런 식으로 하여 접속에 성공했다면, 먼저 당신은 성공적인 해킹에 대한 축하를 받을 만하다. 그러나 이제 무엇을 할 것인가? 더 높은 권한을 얻거나, 프로그램에서 완전히 빠져나가는 것에 관심이 있다면, 그 방법을 알아내는 데 많은 어려움을 겪게 될 것이다. 다음 절은 제한된 권한에서 벗어나는 데 필요한 몇 가지 기술을 알려줄 것이다. 정공법정공법은 당신의 컴퓨터를 위한 수작업을 뜻한다. 실행이 그렇게 어렵지는 않으나 시간이 많이 걸린다. 정공법이란 뭔가 들어맞을 때까지 혹은 포기하고 더 나은 방법으로 바꿀 때까지 비밀번호를 하나하나 다 입력해 보는 방법을 뜻한다. 정공법은 보통 해커가 시스템에 침투할 때 최초로 쓰거나 최후에 쓰는 수단이다. 처음에 정공법을 사용하는 건 별로 내키지 않는 시도일 것이다. 만일 그가 암호를 바로 알아내거나, 75번이나 100번의 시도, 또는 그 이상의 시도 끝에 알아낼 수 있다면, 알아냈으니 그것으로 족하다. 실패했다면 잠시 다른 각도로 접근을 시도할 것이다. 만일 그런 복잡한 방법도 먹혀들지 않는다면, 다시 최후의 방법인 정공법으로 돌아갈 것이다. 어쨌든 정공법은 언젠가는 성공하게 되어 있다. '꼭 성공한다'는 점이 해커로 하여금 정공법을 사용하도록 유혹하지만, '언젠가는'이라는 점 때문에 망설이게 한다. 정공법에는 많은 시간이 소요되지만 다른 것은 별로 필요치 않다. 그 시간은 조사, 시도와 착오, 그리고 시스템에 비밀번호를 하나하나 입력해 보는 프로그램을 작성하는 데 필요하다. 정공법은 성공적인 해킹을 위해 바람직한 방법은 아니지만, 결국에는 성공한다는 이유 때문에, 모든 해커가 한두 번씩은 의존하는 방법이다. 어떤 특정 시스템을 사용하는 사람에 대해 아무 것도 모르는 경우 통상적인 사용자 명과 비밀번호가 다 실패한 경우, 그리고 어떤 속임수도 먹혀들 것 같지 않은 경우가 있을 수 있다. 이런 경우에는 모든 정공법 접근 중 가장 단순한 방법을 시도해야만 할 것이다. 즉 계속해서 시스템에 전화를 걸어 새로운 사용자 명, 비밀번호 조합을 입력하고, 성공할 때까지 이것을 반복하는 프로그램을 작성해야 할 것이다. 이것은 영원히 계속될 수도 있다. 몇몇 해커는 워드프로세서 프로그램이나 게시판에서 입수한 사전 파일을 이용한다. 그것은 좋은 생각인데, 다만 당신이 그것을 적절히 사용할 때에만 그러하다. 흔한 이름들, 알파벳의 각 글자, 음악가들, 자동차들과 역대 대통령의 이름, 숫자, 유명 인사의 별명, 여타 흔한 비밀번호들이 포함되도록 사전 파일을 편집하라. 비밀번호로 사용하기엔 너무 이상해 보이는 'perspectives'와 같은 단어는 삭제하라. 시간을 절약하는 것에 대해 말하면 비언어로 이루어진 비밀번호에 대해 정공법을 시도할 때에도 마찬가지이다. 만일 당신이 뉴욕에 살고 있다면 당신은 뉴욕 시의 사회 보장 번호만을 정공법의 데이터로 사용해야 한다. 시도해야 할 잠재적 코드를 줄일 수 있는 방법은 많다. 군대는 TAC 접근통제 시스템(TAC Access Contol System, TACACS)이라는 것을 네트워크 컴퓨터 사용자의 합법성을 알아보는 데 사용한다. TACACS가 검사하는 접속 코드는 문자와 숫자를 조합한 문자열이다. 그러나 그 문자열에는 결코 숫자 0과 1이나 문자 Q,Z가 포함되어 있지 않다. 이렇게 결정한 이유는 사용자의 신분 카드에서 접속 코드를 읽어들일 때 1,0,Q,Z는 다른 문자나 숫자로 쉽게 혼동될 수 있다는 것이다. 일단 사용 가능한 비밀번호가 포함된 사전을 당신이 필요에 가장 적합하게 수정했거나, 어떤 코드가 가장 자주 발생할 것 같은지를 결정했다면, 자신에게 익숙한 프로그래밍 언어를 이용하여 모뎀으로 전화를 걸어 한 번에 하나의 단어를 비밀번호로 입력하고, 성공할 때까지 계속 시도하는 작은 프로그램을 작성할 것이다. 이것은 작성하기 간단한 프로그램이지만 그렇게 할 전문적 기술을 가지고 있지 않다면, 이런 프로그램은 BBS에서 많이 구할 수 있다. 프로그램 작성에서 고려해야 할 몇 가지 요소가 있다. 그 컴퓨터 시스템은 당신이 잘못된 사용자 명, 비밀번호 조합을 몇 번이나 입력하는 것을 허용하고 접속을 종료시킬 것인가? 3번? 8번? 만일 시스템이 접속 종료 전에 3번의 기회를 준다면, 당신의 프로그램은 정확히 3개의 사용자 명, 비밀번호 조합을 시도하고 재접속을 실행하도록 작성되어야 한다. 종종 먼 거리에 위치한 컴퓨터는 입력 프롬프트가 화면에 나타나기 전이라도 문자의 입력을 받아들이는 경우가 있다. 당신이 목표로 한 시스템이 이런 종류가 아니라도, 만약을 대비해 커서가 나타나기 전에 비밀번호가 입력되지 않도록 프로그램에 지연 루틴(delay loop)을 집어넣어야 한다. 마침내 프로그램이 소용되는 사용자 명과 비밀번호를 찾아낸다면 어떻게 될 것인가? 당신이 자리에 없는 상태에서, 컴퓨터가 프로그램의 작동 상황을 체크할 능력이 없다면, 정공법 시도가 성공했을 때를 알 수 있는 몇 가지 방법이 필요하다. 그렇지 않으면 프로그램은 비밀번호를 계속 출력할 것이고, 이것을 눈치챈 시스템 운영자는 즉각 보안 조치를 취할 것이다. 프로그램이 원거리에 있는 컴퓨터로부터 전송되는 문자가 무엇인지를 인식할 수 있도록 만들어라. 접속 프롬프트 외에 다른 어떤 텍스트가 전송되었을 때, 모니터가 번쩍이면서 프린터에서 큰 벨소리가 울리도록 프로그래밍 하라. 아니면 일단 접속을 끊는 명령을 입력하도록 하고 입력 가능한 사용자 명과 비밀번호를 다음날 아침 일어났을 때 볼 수 있도록 화면에 출력하도록 해 놓아라. Joe라는 사용자가 X회사에서 일하고 있는 것을 안다면, 당신은 Joe, User, JUser, 그리고 Joe User를 joe, JOE, joeuse 같은 변형은 말할 것도 없고, 사용자 명으로 한 모든 비밀번호 조합을 입력해 볼 프로그램을 만들 수 있다(하지만 사전 조사와 실험을 통해 사용자명이 가지게 될 일정한 형식을 알아 낸다면, 너무 많은 변형을 시도해 볼 필요는 없다). 반면에 거기서 일하는 사람의 이름을 모른다면(회사 전화번호를 찾아보고, 전호를 걸어 물어 보고, 연차 보고서, 신문 기사, 기타 직원 이름을 알아볼 수 있는 수많은 곳을 뒤져)알아내거나, 가능한 모든 사용자 명 조합을 입력해 봐야 한다. 만일 후자의 방법에 의존해야 한다면 여성과 외국 이름도 입력해 봐야 한다. 도서관으로 가 가장 널리 쓰이는 성과 이름이 무엇인지 찾아 볼 수도 있다. 그러나 현재 인기 있는 이름이 아니라 침투하려고 하는 회사 직원들의 연령을 고려해, 20년이나 30년 전 부모들이 그 직원의 이름을 지어 줄 때 인기 있었던 이름을 찾아봐야 한다는 사실을 기억하라. 물론 비밀번호를 자동으로 입력해 주는 프로그램을 작성하는 것이 절대적으로 필요한 것은 아니다. 시간과 참을성이 있다면 당신은 앉아서 직접 암호를 입력할 수 있다. 그러나 이렇게 하는 것은 컴퓨터가 정공법을 쓰는 데 걸리는 그 방대한 시간보다 훨씬 더 오래 걸린다는 사실을 기억하라. 불필요한 초과 작업을 없애기 위해 아무리 많은 조치를 취한다 해도, 정공법의 성과를 보기 위해서는 많은 시간이 필요하다는 점을 강조하고 싶다. 그러므로 비밀번호의 입력 속도를 높이기 위해 할 수 있는 조치를 하는 것이 중요하다. 3번의 비밀번호 입력 시마다 모뎀 접속을 다시 해야 한다면 버튼식 전화기 선을 사용하도록 하라. 또한 정공법 접근을 시작하기 전에, 친구에게 빌리는 한이 있어도 가장 빠른 속도의 모뎀을 준비하라. 조금이라도 빠른 모뎀을 사용하는 것이 작업진행시 유리하다.정공법을 좌절시키기 어렸을 때 가족과 저녁 식사하러 나간 적이 있었는데, 그 식당에는 양껏 먹기라는 특별 메뉴가 있었다. 당연히 난 먹을 수 있는 만큼 먹어 보기로 결심했다. 그러나 3번째 추가 주문시 음식은 너무 늦게 나왔고, 또 양이 적어 실망했다. 아버지는 이렇게 설명해 주셨다. "너도 알다시피 이 방법은 많이 못 먹게 하려는 수작이란다. 음식이 나오는데 오래 걸려 지루하게 만들고, 양도 적게 주기 마련이지." 그 말이 사실인지는 모르겠지만 잠시 후 접시에 나온 음식을 보니 그걸 먹기 위해 40분 가량 기다릴 가치는 없었다. 정공법 공격을 방해하는 데 사용되는 기술은 저 양껏 먹기 식당의 원리를 응용하고 있다. 앞에서 언급한 바와 같이, 충분한 끈기만 있다면 우연이나 추측에 의해 합법적인 사용자 명, 비밀번호를 해킹하는 것은 시간문제이다. 그러므로 그와 같은 정공법의 성공을 막는 방법은 해커를 실망시켜 빨리 포기하도록 시스템 프롬프트를 구성하는 것이다. 가장 일반적인 방어는 접속을 끊기 전에 몇 번의 입력만을 허가하는 것이다. 그런 다음 얼마 동안 재접속을 거부하도록 만들어 놓는다. 합법적인 사용자가 불편을 겪을지도 모른다는 약점이 있긴 하지만, 몇 분 기다리는 불편은 접속 후 시스템 파괴자에 의해 자기 파일이 망쳐진 것을 발견하는 데 비하면 아무 것도 아니다. 다른 방법은 계속되는 접속 시도에 따라 시스템의 반응시간을 점점 느리게 해놓는 것이다. 유능한 해커라면 원거리에 있는 컴퓨터로부터의 반응시간이 30초라는 사실을 알 수 있을 것이다. 그리고는 1분, 다음엔 2분, ........ 처음 서너 번의 시도로 접속에 성공하지 못한다면 지연 시간이 나타나지 않을 것이다. 그리고 나면 컴퓨터는 감지할 것이다. "아이쿠, 합법적인 사용자라면 자기 이름을 이렇게 여러 번이나 잘못 입력하지는 않을 거야. 해커가 틀림없어!" 또 다른 속임수는 가짜 접속용 입력 메뉴를 만드는 것이다. 일정한 횟수에 걸쳐 틀린 비밀번호가 입력되면 이 가짜 메뉴는 작동을 개시하여 어떤 비밀번호가 입력되건(심지어 맞는 것이더라도) 무조건 틀리다는 메시지를 내보내도록 메뉴를 만드는 것이다. 이 이야기의 교훈은, 만일 당신이 어떤 암호 파괴 프로그램을 작성한다면, 그것의 동작 상황을 꼭 체크하도록 만들라는 것이다. 이같은 보안 조치가 없게 만들었다면, 밤새도록 작동하게 내버려둔 채 자리를 떠나지 마라. 다음날 아침 일어났을 때, 상대 시스템이 입력에 반응하는 데 40분 걸린 것을 발견할지도 모른다. 혹은 가능한 조합은 모두 입력되었는데도 아무런 성과가 없었다는 것을 알고 결국 가짜 접속 프롬프트에 대답하느라 시간을 낭비했음을 알게 될 것이다. 결론이 장의 상당 부분은 근거 있는 정공법을 시작할 때에 시도할 수 있는 여러 가지 '그럴 듯한' 비밀번호의 추측 방법에 초점을 맞추었다. 우리는 통상적인 비밀번호들(얘완동물 이름, 역사적인 날짜, 방 번호, 책 제목 등)을 수도 없이 열거할 수 있다. 이것들의 모음을 제거하거나, 역순으로 하거나, 다양한 철자 병형을 가하는 것은 말할 것도 없다. 가능한 비밀번호들의 개수를 몇 개로 제한하려는 것을 포기해야 할 때가 온다. 당신이 '제한한' 비밀번호의 수는 제한을 두기 전과 마찬가지로 무한할 것이기 때문이다. 게다가 어떤 비밀번호는 '쉽게 추측할 수 있는' 것이면서도, 추측을 힘들게 할 정도로 안전한 것일 수 있다. 'Smith'라는 비밀번호는 안전하지 않다. 'Jones' 역시 안전하지 않다. 그러나 'Smith@Jones'는 다른 어떤 것보다도 추측하기 힘들다. 모르는 사람은 비밀번호 추측을 해커의 좋은 심심풀이 감으로 본다. 그러나 본질적으로 그것은 해킹의 시작일 뿐이다. 전공법은 컴퓨터를 사용할 때 가장 잘 수행되며, 시스템 접근 권한을 얻는 데 컴퓨터가 필요할 때에만 정공법이 사용되어야 한다(로버트 모리스 2세의 웜 프로그램을 하나의 예로 생각한다). 사실 해킹의 모든 사항은 기술과 지식에 관련되어 있다. 하지만 정공법은 이 두 가지를 거의 필요로 하지 않는다. 그렇다고 누구도 발전된 정공법을 사용하는 해커를 경멸할 수는 없고, 특히 해커가 정당한 이유가 있어 사용할 때는 더욱 그렇다. 그러나 하기 힘든 일을 하는 데에는 컴퓨터의 근육에 의존하지 말라. 당신 두뇌의 교묘한 계산 능력을 사용하라. 이것이 다음 두 장의 주제이다.제 5장 사회공학어떤 사람이 '사회 공학'에 대해 처음 듣게 된다면 어느 정도 충격을 받게 될 것이다. 적어도 나에게는 충격적이었다. 해킹은 우주의 기술적인 비밀에 접근케 할 황금 단어 하나를 찾기 위해 자정이 넘은 밤중에 어떤 맹하고 바보 같은 녀석이 자판을 두들겨 대며 치열하게 추구하는 활동일 수도 있다. 실제로 과거의 어떤 시점에서는 그러했으나 결국은 쓸모 없는 짓이 되어 버렸다. 이같은 정공법은 분명 유효하고, 그것들은 풍부한 해커의 무기 중에서도 필수적인 것이다. 그러나 비밀번호를 알아내는 또 다른 방법이 있다. 사회공학이 그 하나이다. '사회공학'은 시스템의 합법적인 사용자의 대화하여 보안 장벽을 뚫고 들어가기 위해 필요한 모든 것을 누설하게 하는 시도이다. 이것의 다른 명칭은 '운영자 속이기'이다. '사회공학'은 다양한 형태로 가면을 쓰고 나타난다. 여기에서 나는 그 중 상당수를 기술할 것이다. 당신은 이 예들, 이 교묘한 뒤틀림과 변형에 의해 수없이 만들어질 수 있음을 발견하게 될 것이다. 몇몇의 비결은 내가 설명할 것이며, 나머지는 당신의 창조적인 상상력에 맡겨질 것이다. 고상한 형태비밀번호를 알아내려는 시도에서 치사한 속임수를 사용하지 않는 윤리 의식을 가진 해커들에게 있어서, 사회공학의 한 형태가 도의에 벗어나지 않고 여전히 사용될 수 있다. 그것은 "~해 주시겠습니까?" 하고 정중하게 요청하는 것이다. 나는 결코 이것이 먹혀들어 갔다는 확인된 예를 들어본 적이 없지만 해커들이 시스템 사용자에게 단순히 요구해서 비밀번호를 얻었다는 소문이 있기는 하다. 이 이야기는 이렇다. 보통 시스템 운영자가 전화로 문의를 받거나, 혹은 전자우편으로 다음과 같은 편지를 받는다는 것이다. '저는 해커입니다. 저에게 가장 초보적인 접속 방법을 알려 주시면 제가 기술을 써서 당신 시스템의 약점이 무엇인지 보여 드리겠습니다. 이같은 방법으로 당신은 그 약점을 고칠 수 있고, 훗날 악의를 가진 침입자에 의해 고통받지 않게 될 것입니다.' 다른 방법으로 누구에겐가 예를 들면 사무실의 비서에게 전화를 걸어 '당신이 아침에 처음 컴퓨터를 시동할 때 뭐라고 입력합니까?' 하고 단순하게 묻는 것이다. 이것이 통할까? 글세, 당신에게 행운이 따라서 일에 싫증나거나 보안 절차에 대하여 잘 모르는 누군가와 통화를 한다면 모를까? 속임수가 빠진 사회공학은 성공할 것 같지도 않고, 훗날 당신이 시스템에 접근하는 것을 어렵게만 만들 것이다. 오히려 당신은 자신의 기술을 열심히 익혀서 전화 속임수에 써먹는 것이 나을 것이다. 초심자로 위장한 해커여기서 당신은 초보자의 역할을 하게 된다. 당신이 어느 회사의 컴퓨터 시스템에 침입하려고 노력한다고 하자. 시간은 오전 8시 55분이다. 당신의 집 혹은 어디에서건, 당신은 컴퓨터 부서에 전화를 걸어라. 다음은 그 대화 내용이다. 상대방: "안녕하세요. 컴퓨터부 잭 치퍼입니다."당신: "안녕하세요. 잭, 저는 연구부 게리 헤리스입니다. 아마 당신은 제 문제를 도와주실 수 있겠죠?"잭: "글쎄요... 무슨 일인데요?"당신:"음..... 제가 여기에 제일 먼저 출근했어요. 그런데 일을 시작할 수 없습니다. 좀 알려주시겠습니까?"잭:"물론이죠. 컴퓨터 옆에 계시죠?"당신:"네."잭:"좋아요. 바닥의 붉은 스위치를 켜세요. 거기 스위치가 보이죠?"당신:"네, 좋아요. 봤어요.... 됐어요."잭:"부팅이 되려면 몇 분이 걸릴 겁니다."당신:"뭐라고요?"잭:"음... 부팅요. 제 말은 컴퓨터가 세팅되어 쓸 수 있게 되려면 1,2분 정도 걸릴 거란 얘기죠."당신:"좋아요. 멈췄어요."잭:"뭐가 보이죠?"당신:"언제나 보는 대로죠. 전에도 여기까지는 잘되었어요. 그러나 이 다음부터가 안됐지요. 여기서 안될 때 뭘 해야 하죠?"잭:"보통 뭐라고 입력하시지 않으세요?"당신:"몰라요. 여기에 처음이에요. 전 임시직원이고요. 누군가가 제게 말해 줄 거라고 했는데!"잭:"좋아요. 엔터 키를 누르세요."당신:"엔터.... 됐어요."잭:"그럼 'TEMP' 한 칸 띄우고 'PUPPY'라고 치세요."당신:"좋아요... 아하!"잭:"알겠어요?"당신:"고마워요, 잭. 전에는 뭐가 잘못됐는지 몰랐어요!"이제 나는 이 대화를 다시 훑어보려고 한다. 이번에는 성공적인 사회 공학자의 몇 가지 핵심 요소를 지적하려고 한다.상대방:"안녕하세요. 컴퓨터 부 잭 치퍼입니다."당신:"안녕하세요. 잭. 저는 연구부 게리 해리스입니다."여기서는 기술자의 말을 흉내내고, 기술자가 자신을 소개하는 것과 비슷한 방식으로 당신을 소개함으로써 대화를 시작하는 방식에 주목하라. 이것은 상대방이 더 편안하게 당신과 대화를 나눌 수 있게 만들고 당신이 누구이면 회사에서 무슨 일을 하는지 밝히기를 꺼리지 않는다는 것을 보여주는 방식이다. 만약 잭이 전산실 소속이라고 말한다면 당신은 연구실 소속이라고 말할 수 있을 것이다. 회사 안내서를 참고할 수 없다면, 당신은 직원들이 사용하는 회사의 각 부서의 정확한 이름을 모를 것이다. 그러므로 직원(이 경우에는 기술자이다)처럼 말하는 것이 보통 안전한 방책이다. 무슨 무슨 '위원회'나 무슨 무슨 '실'이라고 말해야 하는데 무슨 무슨 '부'라고 말했다 하더라도, 기술자가 그런 용어를 사용했다는 사실이 그의 귀에는 당신을 직원으로 들리게 할 것이다.당신:"아마 당신은 제 문제를 도와주실 수 있겠죠?"이것은 컴퓨터에 대한 기술자의 자부심에 호소하는 것이다. 또한 그의 시스템에 아니 당신이 그의 시스템을 사용하는 데 무엇이 잘못되었나 하는 호기심을 불러일으키는 것이다. '아마'라는 말은 그 기술자를 약간 흥분시킬 것이다. 당신은 그의 컴퓨터 실력에 의문을 제기할 정도로 바보는 아닐 것이다. 그러면 그는 자기가 얼마나 똑똑한가를 당신에게 보여주는 데 열중하게 될 것이다. 박식한 사용자는 자신의 컴퓨터 실력을 자랑하기 좋아하며(나 역시 그렇다. 당신은 어떠한가?), 특히 종일 비전문가인 수많은 사람들을 돕는 것을 직업으로 하는 기술자는 말할 나위도 없다. 또한 '문제'라는 단어의 언급에 주목하라. 컴퓨터 메니아들은 문제 해결을 좋아한다. 막연하게 자신의 시스템에 문제가 있다고 언급하라. 그러면 그는 매우 흥분할 것이다. 이제는 당신이 귀를 열기만 하면 비밀번호가 곧장 굴러들어 올 것이다. 당신:"음... 제가 여기에 제일 먼저 출근했어요...."처음에 시간이 오전 8시 55분이라고 한 것을 주목하라. 일과 시작 전에 통화하는 것이 언제나 가능한 것은 아니다. 그러나 그렇게 할 수만 있다면 분명 도움이 될 것이다. 일과 시작 전에 통화하는 것은 도움을 청하는 전화를 거치는 데 좋은 구실이 된다. 당신이 사무실에 제일 먼저 출근했다면, 거기에는 물어 볼 다른 사람이 없다. 그러나 기술자들도 항상 자리에 있는 것은 아니기 때문에 이것은 언제나 가능한 일은 아니다. 따라서, 당신은 일과가 끝날 무렵에 전화를 걸 수도 있다. 그러면 당신이 일을 끝내기도 전에 사무실의 다른 사람들이 컴퓨터를 끄고 퇴근해 버렸다고 말할 수도 있을 것이다.당신:"..그런데 일을 시작할 수 없습니다. 좀 알려주시겠습니까?"그가 자신이 영웅임을 알게 되면 접속 절차에 대한 당신의 위장 전술이 어딘가 이상하다는 낌새를 알아채지 못하도록 여전히 애매 모호한 상태를 유지하면서 즉시 문제를 확인시킨다. 결국, 당신의 집에서 회사의 시스템으로 전화를 거는 것이 실제로 그곳에서 직접 사용하는 것과는 크게 다를 수도 있다. 그러므로 당신은 일반적인 질문에 머무르고, 기술자에게 문제의 세부 사항을 마음속에서 그리게 하는 것이 좋다. '당신이 좀 알려주시겠습니까?'는 그에게 기계적으로 매일 행하는 어떤 것을 해 달라고 요청하는 것이다. 다시 말하자면, 그에게 어떤 명확한 일(셋업 과정을 처음부터 끝까지 말해 주는 것 같은)을 해 달라고 요청하는 것은 중요하다. 그러나 당신은 의심이 날 정도로 박식하게 보여서 위장이 탄로 나게 될 만큼 구체적인 것을 요구해서는 안된다. 예를 들어, 만약 당신이 단순하게 '저를 도와주실 수 있나요?' 하고 말한다면 그는 당신의 사무실로 도와주기 위해 찾아올 수도 있다. 당신은 실제로 사무실에 없기 때문에, 이것은 분명히 당신의 속임수를 노출하는 것이 된다. 잭:"좋아요. 바닥의 붉은 스위치를 켜세요. 거기 스위치가 보이죠?"당신:"예, 좋아요. 봤어요.... 됐어요."당신은 기술자가 요구하는 대로 하는 척해야 한다. 왜냐하면 당신이 사실은 사무실에 없고, 접속 번호도 없어서 사회공학을 하고 있기 때문이다. 당신의 옆에 실제로 컴퓨터가 있다면 좋다, 그러면 상대방은 파워가 켜지는 것과 당신이 키보드를 두드리는 소리를 들을 수 있기 때문이다.잭:"부팅이 되려면 몇 분이 걸릴 겁니다."당신:"뭐라고요?"잭:"음... 부팅요. 제 말은 컴퓨터가 세팅되어 쓸 수 있게 되려면 1,2분 정도 걸릴 거란 얘기죠."당신:"좋아요. 멈췄어요.""뭐라고요?"는 당신이 컴퓨터에 대해서 완전히 무지하다는 사실을 보여준다. 그렇지만 당신이 지난 30년 동안 동굴에서 산 것처럼 가장하는 것은 바람직하지 않다. '키보드가 뭐죠?'라고 말하는 것은 당신의 무지함에 대한 동정이 아니라 절대적인 불신을 유발하게 될 뿐이다. 그 대화에는 계획이 있음을 있지 마라. 당신은 대화를 당신에게 유리한 방향으로 조정하려고 노력하고 있으므로 당신은 항상 대화가 진해오디는 방향을 통제할 수 있어야 한다. "좋아요, 멈췄군요."하는 말은, 기술자에게 컴퓨터가 잘 움직이고 있고 전화로 가르쳐 주는 능력이 약해지지 않았다고 안심시킨다. 그러나 무엇보다도, 그렇게 말함으로써 당신이 궤도에서 벗어나지 않고 대화가 그 궁극적 목적지를 향하여 계속될 수 있는 것이다. 잭:"뭐가 보이죠?"당신:"언제나 보는 대로죠. 전에도 여기까지는 잘되었어요. 그러나 이 다음부터가 안됐지요. 여기서 안될 때 뭘 해야 하죠?"잭:"보통 뭐라고 입력하시지 않으세요?"당신:"몰라요. 여기에 처음이에요. 전 임시직원이고요. 누군가가 제게 말해 줄 거라고 했는데!"이런! 이 친구는 눈감아 주지 않는군! 당신은 또 다른 포괄적인 대답을 해 볼 수도 있다('보통 저는 여기에서 비밀번호를 입력해요' 등등). 그러나 당신이 잘못 추측했다면 어떻게 할 것인가? 이 시점에서 사무실 직원은 도스 프롬프트나 메킨토시의 데스크탑에 위치한다면 어떻게 할 것인가? 당신도 알다시피 모뎀 접속선들은 비밀번호로 보호되어 있으면서, 사내의 컴퓨터들은 그렇지 않을 수도 있다. 사태의 컴퓨터들은 신뢰나 물리적인 열쇠, 생체 감별 장치들에 의하여 보호되는 수도 있다. 이같은 경우에는 당신은 '새로운 직원' 책략을 사용한다. 당신이 새로운 직원인 척하는 것은 그 회사가 고용인을 적극적으로 해고하고 있다고 널리 알려져 있거나 파산 직전이지 않다면, 보통은 좋은 방책이다. 당신이 임시직 소개소에서 왔다고 말하는 것은 좋은 생각일 수도 있고 아닐 수도 있다. 임시직들에게는 일반적으로 보고하거나 질문할 수 있는 담당 부서 감독자가 있을 것이다. 그러나 기술자는 이것을 모를 수도 있고, 어떤 경우에는 당신의 감독자는 회의에 갔고, 가기 전 당신에게 컴퓨터 부서에 조언을 위한 전화를 하라고 말했다고 할 수 있다.잭:"좋아요. 엔터 키를 누르세요."당신:"엔터.... 됐어요."잭:"그럼 'TEMP' 한 칸 띄우고 'PUPPY'라고 치세요."당신:"좋아요... 아하!"잭:"알겠어요?"당신:"고마워요, 잭. 전에는 뭐가 잘못됐는지 몰랐어요!""좋아요.."는 마치 당신이 이와 같은 것을 100만 번 해봤으나 결코 안 된 것처럼 말한다. 기술자의 아낌없는 도움에 감사하고 당신이 경험은 없지만 믿을 만한 사원이라는 인상을 심어 주어야 한다(이 경우, 전에는 뭐가 잘못되었는지 몰랐다고 말함으로써). 나는 비슷한 문제들이 생긴 합법적인 사용자와 기술자가 나눈 수백 개의 실제 대화에 기초하여 이 견본 대본을 작성하였다. 나에게도 사용자가 전에 이미 했던 것을 작동시키지 않고 어떻게 해야 하는가를 질문해 온 적이 수십 번 있다. 보통은 개요만 알면 다 잘된다. 내 경험에 의하면 이런 전화들로 도움을 받았던 사람들은 성난 투로 "전에도 그렇게 했어요! 그러나 되지 않았어요!"하고 말하고 전화를 끊어 버리는 것이 대부분이었다. 그래서 당신은 기술자에게 친절해야 한다. 당신은 그의 도움이 다시 필요할지도 모른다. 그리고 당신은 받은 도움에 대하여 감사하고 있다는 것을 알면 기술자의 성취감은 분명 증대될 것이다. 여기 해커가 컴퓨터에 대하여 무지한 척하지만, 그러면서 극히 중대한 정보를 가지고 도망칠 수 있는 방법에 관한 또 하나의 예가 있다. 사무실에 새로운 컴퓨터 시스템이 설치되었다면, 아직 제거되지 않은 버그를 다룰 컴퓨터 회사의 기술부서원과 연락하기 위한 업무용 명함이나 전화번호가 터미널 옆에 붙어 있는 경우가 있다. 이 업무용 명함(메모 용지에 적힌 전화번호일 수도 있다)은 중요한 메시지를 붙이는 벽 한 모퉁이에 붙어 있을 수도 있고, 사무원의 책상이나 카운터 뒤쪽에 숨겨져 있을 수도 있다. 만일 당신이 명함에서 전화번호와 이름을 입수해야만 한다면 목을 빼고 찾아 보라(아니면 그냥 사람들에게 물어 보라. 우리는 모든 것을 항상 교활하게 할 필요는 없다!). 당신이 보험회사의 한 지점에서 어떤 일을 하다가 가까스로 코니 컴퓨터 회사 소속인 프랭크 스미스라는 사람의 전화번호를 얻었다고 하자. 그 번호로 전화를 걸고 이렇게 말한다. "안녕하세요, 부부 보험의 로렌입니다. 컴퓨터에 이상한 현상이 계속되어서 컴퓨터를 꺼야만 했습니다. 어떻게 해야 할지........" 그리고 그들에게 방법을 알려 달라고 한다. 한번은 도서관의 공공 접속 터미널에서 그와 같은 카드가 붙어 있는 것을 보았다. 나는 그 정보고 베껴 적고 전화를 걸었다. "후피(Whoopie) 도서관의 잭입니다(잭이
관련링크
댓글목록
등록된 댓글이 없습니다.