리눅스해킹

게시글 '유닉스 & 인터넷 그리고 해킹'에 대한 정보
유닉스 & 인터넷 그리고 해킹
등록일 2005-12-11 조회 2,527
@인터넷 & 유닉스의 이해 인터넷(Internet)이란 전세계적인 통신망이란 사실은 이미 알고있을것이다. 우리나라에만 하이텔,천리안,나우컴..... 무수한 통신망이 존재한다. 인터넷이란 이런 각종 통신망이 하나로 연결된 망중의 망이다. 이렇게 인터넷으로 묶인 컴퓨터들은 대부분 UNIX라는 운영체제를 쓴다. 인터넷 접속시 천리안,하이텔등에 접속하면 나오는 메뉴와는 차이가 나는데 상대방 컴퓨터에 연결되면 마치 자신의 컴퓨터를 부팅시킨 후와 마찬가지로 c:\> 와같은 prompt가 떨어 진다. 키보드는 우리 집에 있지만 컴퓨터는 외국에 있는 것과 비슷한 효과를 보이게 된다. 원래 유닉스(UNIX)라는 운영체제는 시스템 공유를 위한 멀티 운영 체제이다. 초기의 DOS는 이 UNIX를 본따서 만든 것이지만 그것은 오직 한 명의 컴퓨터 유저만을 위한 운영체제이다. 컴퓨터를 켜고 자기 혼자서 게임을 하고 문서를 작성하는 식이다.하지만 이 UNIX는 여러 개의 단말기와 연결되어 수많은 사람들이 동시에 컴퓨터 를 쓸 수 있도록 개발된 운영체제이다. 예를 들어 도스에서의 파일 리스트 출력 명령인 dir은 ls명령으로 하고 파일 삭제 명령인 del은 rm으로 한다.물론 도스와 유닉스가 사용법이 엇비슷하다고는 하지만 실제적으로 다가서면 좀더 많은 차이를 느끼게 된다.유닉스는 도스처럼 단순유저용이 운영체제가 아니라서 대단히 복잡 한 문제를 안고 있기 때문이다.우선 유닉스가 멀티운영을 하고 있고 또한 정보 공유를 위해서 만들어진 운영체제인 만큼 컴퓨터끼리의 통신과 보안 등이 문제된다. 유닉스 시스템에 접속을 하면, login을 물어본다.상대방의 계정(통신망의 ID와 비슷한 개념)을 물어온다.그리고 암호를 확인 한 후에 도스에서와 같이 /home1/id> (도스에서 c:\> 와 비슷..) 이런 프롬프트가 출력된다.그러면 우리는 이곳에서 도스와 마찬가지로 파일을 삭제하고 카피하고 전송하고 만드는 등의 작업을 수행할 수 있다. 그런데 이렇게 여러사람이 시스템을 공유하다보니 내가 만든 것을 남 에게 보여주어서는 안되는 것이 있다.기밀문서나 힘들여 만든 프로그램, 공개해서는 안되는 것들등이다.이런 것들을 공개된 파일과 구별하기 위해서 유닉스에서는 파일의 삭제(수정), 복사, 실행 하는 권한을 명확히 구분해 놓고 있다.파일마다 자신의 주인이름(그 파일을 컴퓨터에 카피해 놓았거나 생성시킨 사람)의 기록되어 있어 그 주인은 그 파일의 삭제, 복사(열람), 실행에 관하여 각각 다르게 권한을 부여할 수 있다. 공개하거나 감추거나 하는 것은 모두 그 파일의 생성자가 조정할 수 있다. @ 유닉스 & 인터넷에서의 해킹이란 인터넷 해킹이야기를 많이 들었을것이다. 인터넷이 왜 그렇게 해킹을 잘 당하냐구 궁금해 할것이다. 이유는 간단하다. 인터넷은 아직 그 기능적인 면이 취약하다. 어떤 강력한 조직체에서 일괄적인 관리를 하는게 아니니 더욱 그러하다. 대부분의 인터넷 관련 명령어들이 유닉스상에서 명령어를 사용한다. 그렇기때문에 유닉스에 대해 잘알고 있는 사람이라면 해킹은 충분히 가능하다.. 천리안도 호스트는 유닉스지만 명령어를 바꿔서 쓰기때문에 해킹이 힘들어 지는 것이다. 인터넷에서 가장 유명하고 현재도 쓰이는 공격법으로 E-MAIL(전자우편)을 이용한 방법이 있다. E-MAIL 상의 버그를 이용한 것으로 바이러스 프로그램이 자동으로 여러 사용자에게 자신을 전 파하여 메일을 읽으면 바이러스가 작동하는 것이다. 일단 이 유닉스가 인터넷에 연결되면 편지를 보내는 기능부터 파일을 전송하는 부분까지 몽땅 다른 컴퓨터에 대해 열려 있어서 연결된 아무 곳에나 편지나 파일을 보낼 수 있다.(물론 받을 수도 있다.) 전세계 회선이 가 있는 컴퓨터이면 어느 곳이나 가능하다.하지만 이 것이 가능하기 위해서는 일정한 전송 규약이 있어야 한다.편지의 형식은 어떤 것으로 정해서 어떤 식으로 전송한다는 하나의 약속이다.이런 것들을 전숑규약(protocol이라고 한다.현재 우 나라에서 많이 쓰이는 도스용 zmodem도 일종의 protocol이다.파일을 보내기 위해서 동시에 약속한 일종 의 전송 규약이기 때문이다. 그런데 이렇게 정보가 왔다가 갔다가 하니 자칫 잘못하면 내가 사업상으로 중요하게 작성한 문서를 프랑스에 보냈는데 그것이 누설 될 수가 있다. 중간에 회선을 통해 가는 정보를 누군가 중간에서 가지고 갈 수 도 있다. 보안이 문제되는 것이다.천리안,하이텔 등에서는 보안문제가 인터넷에 비해서는 그리 심각하지 않다. 유닉스 명령어와는 다른 특수한 호스트 프로그램을 쓰기 때문에 가장 커다한 보안문제는 기껏해야 아이디 도용으로 인한 개인적인 피해일 뿐이다. 어떤 사람이 다른 사람의 암호를 우연히 알아내어 대신 사용한다든지(이 사용으로 불법적인 일을 몇가지 할 수 있을 것이다) 하는 수준이다.실제로 대형 통신망에서의 해킹은 몇몇 지각없는 사용자들이 사설비비에스와 동일한 암호를 사용해서 그 사설비비에스의 암호파일이 도난 당하는 경우 피해를 본다든가 자신과 가까운 이에게 암호를 들킨 경 우 뿐이다.그러나 인터넷의 경우에는 해킹이라는 것이 얼마나 치명적인지 상상을 할 수 없을 정도다.유닉스 시스템에는 슈저 유저(super user)라는 것이 있다.개개인의 사용자들은 철저히 자신의 정보를 보호할 수 있지만 누군가 그 유닉스 시스템을 효율적으로 관리할 필요가 있다.모든 파일에 대한 삭제, 수정이 자유롭고 완벽하게 초인적인 권리를 지닌 계정이 필요한 것이다.그것을 슈퍼 유저라고 한다.(그런데 계정입력하고 유닉스에 접속하 는 것은 완벽하게 일반 유저와 동일하다.단지 권한이 막강하다는 것 뿐이 다.)암호를 고쳐주는 일을 하는 작업요원들이 있는 것과 같은 이치다. 그런데 만약 이 슈퍼유저의 암호가 유출된다면 어떻게 될까? 하이텔에는 특정한 호스트 프로그램 하에서 정보제공이 이루어지므로 다른 특별한 방법이 없는 한 그냥 일반유저나 관리자나 별반 다를 것이 없다.그 런데 유닉스는 아니다.슈퍼유저로 유닉스에 접속하면 당장에 그 시스템의 모든 파일을 삭제할 수 있다. 설령 그것이 우리나라 모든 사람의 주민등록 번호를 담고 있는 상상할 수 없이 방대한 자료이다 할지라도 유닉스 명령어인 RM -R /* 하면 끝나는 것이다. 그리고 또한 문제가 되는 것이 이러한 암호 유출이 단순하게 사용자의 부주의로만 일어나는 것이 아니라는 것이다.앞에서 밝혔듯이 유닉스는 원래 정보 공유를 위해서 만들어진 운영 체제이다.그래서 그에 따른 수 많은 부속 프로그램을 가지고 있는데 이 프로그램들이 전부 완벽할 수가 없다.어딘가 헛점을 가지고 있다.예를 들어 보자. 인터넷에서는 유닉스용 ftp라는 파일 전송 프로토콜이 있다.이 것은 다른 유닉스 시스템에서 공개되어 있는 자록도록 되어 있는데 ftp는 이러한 파일들을 카피해 올 수 있는 기능을 가졌던 것이다.프로그래머가 ftp를 만들때 파일에 대한 소유권을 점검하여 타인에게 전송하는 것을 깜빡잊은 것이다. 또한 이런 ftp는 인터넷에서 하나의 컴퓨터에만 쓰이는 것이 아니라 수백만대에서 쓰여서 내가 만약 ftp의 잘못된 버그를 알아낸다면 이 수백만대 컴퓨터가 그 사람에게 노출되어 있어 언제라도 공격받을 수 있다는 것이다.(실제로 공격을 받아서 난리가 난 사건이 있었다.) 유닉스에서 계정(아이디 비슷한 개념)을 보호하는 방법은 해당 계정에 대해 암호를 물어보는 것이다.그리고 이 암호에 대한 정보를 담고 있는 파일은 유닉스 시스템 내에 들어있고 누구든지 볼 수 있다. (지금은 shadow라 하여 못 보는 시스템도 있다.인터넷 서비스를 하고 있는 나유컴의 아이넷이 그렇다.) 그런데 이 암호에 대한 정보는 그리 단순한 것만은 아니다.특별한 암호화 기법(DES압호화기법)을 사용하 여 그 역연산이 불가능하다.(아직 알려지지 않았다.) 그러니까 만약 내가 abdfeg라는 암호를 내 계정의 암호로 지정한다면 컴퓨터는 이 암호를 아주 특이하게 암호화 시켜서 컴퓨터내의 passwd파일 에 내 계졍껦식으로 저장) 그리고 나중에 내가 접속하면 암호를 물어서 그 자리에서 입력받은 암호를 다시 암호화하여 이미 저장된 내용과 비교 한다.그리하여 그 계정의 진짜 주인인지를 확인한다. 그런데 여기서도 문제가 발생한다.일부 사용자들이 암호를 단순하게 apple같은 것으로 했다면 알아내기가 쉬워진다.passwd파일을 컴퓨터에 복사해놓고 DES암호화기법을 통해서 몇가지 가능한 것들을 암호화시켜 passwd파일과 비교하는 프로그램을 짜서 실행하면 암호를 금방 알아낼 수 있다.예를 들어 영어 사전에 있는 모든 단어들을 하나씩 하나씩 비 있다 .그래서 요즘엔 사용자들이 추측하기 어려 운 암호를 써서 위와 같이 비교대조하는 방법으로 암호를 알아내려면 굉장히 오랜 시간이 걸리도록 하고 있다.하지만 이것도 안심할 수 없으므 로 요즘에는 아예 shadow라는 이름의 파일에 이 passwd의 내용을 저장해 놓고 슈퍼유저이외에는 내용을 열람할 수 없게 되어있다. 그런데 이 체계도 구멍이 날 수 있다.유닉스에는 at명령이 있는데 이것은 멀티체제의 유용한 명령중 하나로 지정한 시간이 되면 어떤 프로그램을 실행하라는 등의 일종의 알람 실행기이다.문제는 이 at명령을 사용하여 쉘 스크립트(일종의 프로그램 파일을 지정해놓으면 그 파일(슈퍼유저이외 에는 볼 수 없는 파일)을 저장하여 atjobs의 등록영역에서 대기하고 있게 된 다.이렇게 대기하고 있는 것은 사용자가 접근 권한을 가지고 있기 때문에 쉽게 열람해서 볼 수 있다.운영자 몰래 간접적으로 shadow파일을 뺴내는 것이다.불행히도 나우컴의 아이넷에서 이 방법이 통용되었던 적이 있었다. 하지만 95년되자마자 그 대기영역의 소유자를 바꾸면서 접근을 금지 시켰다.한마디로 더이상 대기영역에 있는 내용을 빼낼 수가 없게 된 것이다. shadow 영역의 패스워드 화일은 퍼미션에 의해서 제한되었다. 그속의 암호들은 DES 암호화 되어 있기 때문에 다른 사람의 암호는 볼수 없다. 그리고 고칠수 없는것은 화일이 퍼미션이 다른 유져에게 닫혀있기 때문에, SOL (INET) 은 /ETC/PASSWD화일을 두개 가지고 있다. 그런것을 쉐도우 PASSWD라고 한다. finger같은 것을 하면 그 사람의 본명을 볼수 있어야한다. 그것은 곧 모든 사람이 /etc/passwd를 읽어야한다는 것이다. 그리고 ls -l하면 그 화일의 소유자를 볼수 있다. 이것은 그 화일의 소유자는 실제적으로 숫자로 기록되어 있고 /etc/passwd화일을 참고 해서.. 그 숫자를 실제적인 계정으로 바꾸는것이다. 그렇게 때문에 /etc/passwd화일은 누구나 읽을수 있어야 한다는 것이다. 하지만 쉐도우암호화는 읽을수 있어야하는 부분만 /etc/passwd에 관리를하고 실제적은 암호는 읽수도 없는 /etc/shadow에 관리한다. 그래서 sol이 핵킹을 안당한다고 자부한것이다. passwd를 읽을수 조차 없어서 하지만 버그에 의해서 읽게 되었다고들 전한다. Unix를 기반으로 하는 Internet User가 자주 사용하는 Internet Tool을 예로 들라면, 아무래도 finger를 뺄 수가 없다. finger - display information about local and remote users. 위의 정의에 따르면, finger라는 것은 자신이 지금 사용하고 있는 호스트(local host) 혹은 원거리 에 있는 호스트 컴퓨터(remote host)의 이용자의 정보를 보여준다고 할 수 있다. 그럼 과연 finger는 어떤 과정을 통해서 먼거리에 있는 이용자의 정보를 보여줄 수 있는 것인 가? 보통 /var/adm 디렉토리에 utmp라는 파일이 존재합니다. 이 파일은 현재 누가 그 호스트에 접 속(logged in)되어져 있는가를 알려주는 파일이다. finger는 username@hostname.domain 의 형식에서 hostname. domain의 /var/adm에서 utmp라는 파일을 검색해서, username의 이용자가 현재 접속하고 있는지 아닌지 부터 알아냅니다. 그 과정 에서 어느 TTY를 사용 중인지도 알아내는 것은 당연하다. 그리고, /etc 디렉토리에 있는 passwd 파일에서 그 username을 가진 이용자의 진짜 이름(Real name)이 무엇인지를 파악한다. 그리고,그 이용자가 사용하는 Shell이 어떤 것인지도 파악한다. 그리고, 어느 디렉토리를 이용하는지도 알아낸다. 그리고, /var/adm 디렉토리의 lastlog 파일에서 그 username을 가진 이용자가 언제 마지막으로 접속을 했는가를 파악한다. 물론 이과정은 utmp에서 username의 이용자가 현재 접속한 상태일 때는 보여주지 않는다. 그리고, 그 username의 이용자 디렉토리에서 .plan 파일을 찾아내어, 그 사람의 plan이 무엇인지 보여주고, .project 파일을 찾아내어, 그사람의 project는 무엇인지 보 여주게 됩니다.(이용자 디렉토리는 etc디렉토리에 있는 passwd에서 알아낸다.) 이런 작업을 해내게 됨으로써 원거리 혹은 local 호스트에 있는 이용자의 finger 결과를 얻어내게 되는 것이다. 만약 어떤 사람이 인터넷에서 슈퍼유저의 권한을 획득하는 방법을 알아낸다면 그것은 수백만 컴퓨터가 그 사람의 공격에 무방비상태라는 것을 뜻한다.그래서 인터넷상에서의 해킹은 더욱더 심각한 것이다. 하지만 아직까지는 그리 심각한 버그는 없는 것같다.그러나 인터넷 상에서의 해킹은 이러한 아이디 도용 뿐만이 아니라 그 복잡성에서 나온 헛점들에 의한 것들도 수두룩 하다.대부분이 일반 사용자가 할 수 없는 일들을 일정한 편법을 써서 되게 하는 것이다. 이제 우리도 인터넷 시대에 접어들었다.국내 수 많은 대기업들이 인터넷에 연결되었고 나우컴에서 천리안에서 인터넷에 접근할 수 있는 계정을 일반 사용자에게 부여하고 있다. 이러한 시기에 아직까지 해킹이라면 하이텔에서 아이디 도용하는 것쯤으로 생각한다면 문제가 아닐 수 없다. 특히 사설비비에스와 천리안,하이텔등의 암호를 공유하는 일이 없도록 당부하는 바이며 기회가 닿는다면 꼭 인터넷에 가입해서 통신이 무엇인지 직접 경험해 보기 바란다.