해킹정보


게시글 '수퍼해커의 해킹비밀 3'에 대한 정보
수퍼해커의 해킹비밀 3
등록일 2005-10-16 조회 6,335
이 책을 집필하는데 사용했던 자료 중 하나는 인기 있는 상용정보 서비스에 대한 비공식 매뉴얼이다. 여성인 저자는 책의 구석구석에서 그녀의 얘완동물인 고양이, 좋아하는 필라델피아의 부드러운 비스킷, 응원하던 미식 축구팀, 자기 남편과 아이들, 그리고 최근에 흥미를 가진 컴퓨터 분야에 관해 자주 언급하였다. 내용 중 언급된 그녀의 생활 습관에서뿐만 아니라 서비스의 '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) 도서관의 잭입니다(잭이란 이름을 가진 사람이 정말로 도서관에서 일을 했다). 공공 접속 모드에서 도서 대출 시스템으로 들어가는 데 문제가 생겼습니다. 컴퓨터가 카운터 뒤에 있어서, 시작할 때 PA모드에서 무엇을 하고 있었는지 모르겠지만........."권력을 사칭하는 해커만일 기술자의 자비심에 호소하는 게 당신이 처해 있는 상황에서 먹혀들지 않는다면, 아마도 권력을 사칭해야 될 때가 온 것이다. 군사 권력을 이용하여 고위 장교인 것처럼 행동하는 것은 지위가 낮은 접수원의 마음에 공포감을 줄 수 있다. 그냥 전화를 걸어, 당신이 장군이라고 하거나 장군의 개인 비서라고 말하라. 둘 중 어느 경우라도 당신은 컴퓨터가 정상적으로 작동하지 않아 시간을 헛되이 보내고 있는 상황이다. 왜 당신의 계정이 유효하게 접속되지 않는지를 알려 달라고 하라. 푸념하거나 불평하지 말고 단지 성난 태도로 요구하라. 그러면 당신은 어떤 성과를 얻을 것이다. 기업에서는, 특히 리더가 성급한 사람으로 잘 알려진 경우에도 경영 최고 책임자나 사장이나 또는 그들의 비서인 척하라. 누구도 해고나 강등을 원치 않는다. 성난 태도는 매우 유용하다. 왜냐하면 전화를 받은 상대방은 그 상황에서 가능한 한 빨리 벗어나려 할 것이고, 그 상황에서 벗어나기 위해 뭐든지 할 것이기 때문이다. 그러나 사장, 리더, 군대 장교, 경영 최고 책임자나 그 비슷한 사람들은 화낼 필요가 없다. 당신이 누구라고 밝히는 것만으로도 당신의 신뢰성은 굳어진다(누가 감히 자신을 아무개 장군이라고 말할 수 있겠는가?). 하지만 당신이 성내지 않고 지위가 높은 사람처럼 행동하려 한다면, 반드시 미리 조사를 하고 당신이 무슨 이름을 사용할 것인지를 정해 두어야 한다. 다음은 예로 설정해 놓은 상황이다.상대방:"안녕하세....."당신:"프로브스 장군이다. 이 곳이 거만하게 굴러가는 것에 질려버렸다! 2,3일 외출하고 돌아와 보니 내가 컴퓨터에서 삭제되어 있다! 이 컴퓨터의 책임자가 누구인가! 지쳤다! 내 계정을 복구할 것을 요구한다! 거기에 중요한 문서가 많이 저장해 놓았다!"상대방:" 'GROUP.1', 'SEC'라고 입력해 보셨습니까? 그건 여전히 됩니다." 당신:"그건 빌어먹을 그룹 코드쟎아! 내 개인 계정을 돌려 달란 말이야! 지쳤다!"상대방:"죄송합니다. 저는 당신의 코드 복구를 도와 드릴 수 없습니다. 할 수 있는 다른 사람을 찾아볼까요?"이 대화 예문에서 그렇게 강력하지는 않지만 적어도 접속할 수 있는 사용자명/ 비밀번호 조합을 얻어내였음에 주목하라. 비록 다른 편의 사람이 결코 장군의 암호를 찾아낼 수 없다고 해도, 적어도 당신은 하나가 아닌 몇 개의 시스템에 대한 접근 권리를 얻어 내었다. 결국, 거기에 GROUP.1이 있다면 GROUP.2도 있을 것이다. 그렇지 않은가?조언자로서의 해커이런 유형의 역할 연기는 어떠한 파괴 행위도 없는 역사회공학과 같다(다음 장을 보라). 여기에서 당신은 어떤 장소의 컴퓨터에 문제가 있고, 그래서 그것을 고치기 위해 전화를 건 기술자인 척한다. 당신이 시장 사무실의 컴퓨터에 침입하기를 원한다고 하자. 당신은 그의 비서에게 전화를 걸고, 다음과 같이 말한다. "안녕하세요. 컴퓨터 회사의 잭 맥코넬입니다. 당신의 컴퓨터 시스템에 무슨 문제가 있었는지 알고 싶습니다." 물론 그녀는 컴퓨터에 어떤 문제를 가지고 있었다. 컴퓨터에게는 항상 문제가 있다! 비서가 대답한다. "음. 있어요! 처음에 이게 발생했고, 그리고 어쩌고저쩌고......" 당신은 말한다. "알겠습니다! 바로 그거군요! 그건 당신 잘못이 아니었습니다. 그 컴퓨터에 뭔가 잘못된게 있어서 우리는 그걸 고치느라 애를 먹고 있습니다. 당신이 컴퓨터를 처음 켜고 시작할 때 뭐라고 입력하십니까? 저희 직원중 한 명이 지난 밤 문제를 일으켰는데 아무래도 그것과 연관이 있을 것 같아서요." 비서는 의심하지 않을 것이다. 어쨌든 당신은 신분을 밝혔다. 비록 당신이 그렇지 않았다고 해도 누구에게 전화로 암호를 알려준들 어떤 피해가 올 수 있겠는가? 당신은 알다시피, 비서나 박봉에 시달리는 직원, 격무로 과로한 직원, 지루하게 시스템을 사용하는 사용자들은 보안이라는 사슬에서 매우 약한 고리이다. 비서는 컴퓨터를 이해하지 못하고 이해하고자 하지도 않는다. 그녀가 아는 모든 것은 컴퓨터에 뭔가 문제가 있다는 점과 당신이 그녀를 위해 그것을 고치려 한다는 것이다. 이것은 매우 효과적인 책략이다.사용량이 가장 많은 시간위에 언급된 책략을 점심 시간이나 오전 일찍 사용하지 마라. 성과를 거두기가 상대적으로 어려울 것이다. 업무의 압박이 쌓이기 시작한 후에 전화를 걸어라. 만약 당신이 침투해 들어가고자 하는 시스템이 당신이 접근할 수 있는(가령 도서관이라든가 치과의사 사무실, 은행이나 학교 같은)장소라면 약간의 조사를 하여 전화를 걸 최적의 시간을 알아내어야 한다. 내가 소속된 도서관 중 하나는 컴퓨터 시스템에 '3시 정각의 속도 하락'이 있다. 매일 오후 3시 즈음에 컴퓨터가 갑자기 평상시 속도의 반으로 느려진다. 이것은 다른 여러 컴퓨터의 오동작을 유발하고, 결국에는 도서관 직원들을 지치게 만든다. 나는 왜 컴퓨터가 그렇게 갑자기 느려지는지 이유를 알지 못한다. 아마도 시스템이 3시에 최고로 많이 사용되거나 혹은 그때 정보가 도서관의 터미널에서 도시 반대쪽에 위치한 대학의 메인 컴퓨터로 이동하도록 되어 있기 때문일 것이다. 만약 내가 몇 개의 사회공학을 도서관에서 사용한다면, 대부분의 문제가 발생하는 때인 3시 정각의 속도 하락 중에 할 것이다. 또 한 가지 알아낸 게 있었다. 컴퓨터에는 아무런 이상이 없음을 알지 못하는(언제나 그 시간이 되면 느려지는 것을 모르는) 도서관 사용자들이 대학 '전산실'에 전화를 걸어 왜 컴퓨터가 다운되었는지를 묻는다. 어느 날 그들이 뭐 도와줄 일이 있느냐는 '전산실'의 전화를 받는다면(즉 나나 당신이 전화를 건다면) 약간 의아해 하면서도 상당히 기뻐할 것이라고 생각되지 않는가? 아마 그들은 기꺼이 자신의 접속 절차를 말해 주고도 남을 것이다. 당신이 그들을 위하여 시스템의 속도를 빠르게 해주기만 한다면! 컴퓨터는 하루의 중간부터 종료 시간쯤에 가장 느려지는 경향이 있다. 그때 가장 많은 사람들이 네트워크 상에 있기 때문이다. 특히 대학에서는 더욱 그렇다. 학생들과 교수들은 오전에 접속하는 경우가 많을 것이다. 그리고는 그들이 시스템을 이용하고 있건 않건 간에 하루 종일 접속 상태를 유지한다. 다른 한편으로 어떤 시스템들은 하루가 흘러가면서 실제로 더 빨라질 것이기 때문에, 항상 조사가 필요하다. 예를 들어서, 프로디지(Prodigy)서비스는 하루가 끝날 무렵부터 밤으로 갈수록, 그리고 사용량이 증가함에 따라 시스템의 속도도 빨라진다는 사실을 자랑한다. 이것은 데이터가 이층 구조(dual-tier basis)에 저장되기 때문이다. 지구상 어딘가의 프로디지 본부에 메인 컴퓨터가 위치해 있고, 다양한 미니 컴퓨터(semi-local minicomputers)에 접속하고 그들이 그 시스템을 사용하면 원격 메인 컴퓨터로부터 지역 미니 컴퓨터들로 자료가 복사된다. 하루가 끝날 무렵에는 사용자가 검색을 요구하는 대부분의 데이터들이 이미 가까운 컴퓨터들로 전송되어 있으므로 기다리는 시간이 적어진다. 당신이 사회공학 목표로 삼은 장소의 시스템 속도 경향을 아는 것이 좋다. 만일(3시 정각의 속도 저하 같은) 속도 상의 두드러진 차이를 발견할 수 있다면, 당연히 당신은 그 시간쯤 사회공학을 시도할 것이다. 적당한 시간은 컴퓨터 속도가 변할 때만이 아니다. 만일 작업 부하, 잡음의 정도, 고객의 수, 또는 다른 악화 요인이 특정 시간대에 악화된다면, 그것은 사회공학자에게 적당한 시간이 된다. 이러한 시간을 알아내기 위해 목표로 삼은 사무실을 매일 다양한 시간대에 방문하도록 하라. 사무실이 가장 바쁠 때를 찾아라. 도서관이나 여행사 같은 곳이라면, 직접 방문하거나 전화를 몇 번 걸어 보아라. 뭔가에 대하여 질문을 하라. 만일 그들이 그것을 컴퓨터에서 찾는 데 곤란함을 겪고 있다면, 컴퓨터 부서에서 근무하는 사람을 가장하고 다시 정화를 걸어라. 사무실을 하루나 이틀쯤 문을 닫은 다음에 가장 바쁠 것이다. 그래서 월요일 오전은 아주 적당한 시간이다. 당신과 전화로 잡담을 나눌 시간이 없을 정도고 바쁘지는 않은지 확인하기만 하라. 물론 사회공학은 어떤 컴퓨터 시스템에도 작용된다. 그러나 당신은 지역 전문대학의 시스템 관리자를 속이는 것이 10대 은행출납계원을 속이는 것보다 더 어렵다는 사실을 자연적으로 알게 될 것이다. 사회공학은 기업 네트워크, 학교, 정부 사무실, 여타 시스템에 접근하는 데 성공적으로 사용되어 왔다. 사회공학은 매우 강력한 도구이지만 그것을 적절히 사용하기 위해서는 당신이 좋은 배우이어야 한다. 다른 힌트들만일 목표로 하는 장소를 조사하고자 한다면 미리 조사하라. 가능한 한 바쁜 시간대와 그들이 시스템에서 경험한 문제들이 어떤 종류였는지를 조사하라. 예를 들어, 만일 목표로 한 장소가 도서관과 같은 공공 장소라면, 거기서 일하는 사람들 중 누가 컴퓨터에 대하여 전혀 모르는지 찾아내려고 노력하라. 그런 사람들에게 전화 통화를 시도해 보라. 또한 당신을 컴퓨터 부서(컴퓨터반 혹은 컴퓨터과, 만일 전화 받는 사람이 "안녕하세요, 등록 사무실입니다"라고 하면 똑같은 어법, '컴퓨터 사무실'을 사용하라)의 아무개라고 소개하는 것을 잊지 마라. 그리고 그렇게 할 때는 일반적이고 평범한 이름을 사용하고, 친숙한 성을 써라. 만일 첫 번째 시도에서 접속 정보를 얻지 못했다면, 다른 날 다른 시간에 다시 시도하라. 그러나 똑같은 사람과 이야기해서는 안된다. 내 친구 빌이 이런 이야기를 해주었다. 어느 여름날 그는 전자 장비를 구입하기 위해 통신판매센터(mail order place)에 전화를 걸었다. 그 여자가 그의 주문을 받으면서. 그녀는 우연히 컴퓨터가 다운되었기 때문에 수작업으로 모든 것을 해야 한다고 불평했다. 빌은 왜 그게 다운되는지 아느냐고 물었다. 그녀는 모르지만 건물의 다른 부분에 컴퓨터들은 이상이 없는데 자기 컴퓨터만 다운이 되어 화가 나 있다고 말했다. 그래서 빌은 전화를 끊자마자 다시 전화를 걸었고, 다른 오퍼레이터가 전화를 받았으므로 다음과 같은 대화를 계속하였다. 오퍼레이터:"Shark's Radio Supplies의 팸입니다. 도와드릴까요?"빌:"네, 하지만 전 당신을 도와 드리기 위해 전화를 했습니다. 컴퓨터부의 빌 로빈슨입니다. 아직도 컴퓨터에 문제가 있습니까?"오퍼레이터:"네, 그래요!"빌:"아, 좋아요. 지금 컴퓨터 화면에 뭐가 보입니까?"오퍼레이터:"아무 것도요. 지금 모든 컴퓨터를 끄고 있어요."빌:"네, 알겠습니다. 당신 컴퓨터에 문제가 있으리라 생각했습니다. 당신은 컴퓨터가 전혀 작동하지 않는 건물 부분에 있나 보군요."오퍼레이터:"네."빌:"그러면, 바로 직전에 컴퓨터를 다시 켜 보았습니까?"