강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

해킹과보안 (I,II,III)

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.giftitle36.gif

이재욱 : salsari@hotmail.com

 

1. 시작하면서

올해로 18세가 된 데이드 머피는 컴퓨터 천재. 11살때 이미 윌스트리트를 해킹 세계 경제를 혼란에 빠뜨린 전과도 있다. 법원에서는 데이드가 18세가 될 때까지 모든 종류의 키보드 근처에서 얼씬도 못하도록 명령했고, 그 동안 그는 컴퓨터에 굶주려 왔다. 이제 18세가 된  데이드는 뉴욕의 새 학교로 전학와 병아리 해커들인 새 친구들과 어울리게 된다. 어느날, 장난끼 많은 친구 죠이가 한 유조선 회사의 컴퓨터에 침입했다가 친구들에게 자랑할 셈으로 ‘쓰레기’ 화일을 복제한다. 처음엔 별거 아니라 생각했던 친구들도 ‘쓰레기’ 화일과 관련된 사람이 모두 지나칠 정도의 공격을 받자 그 비밀을 캐기위해 달려든다. ‘쓰레기’ 화일의 주인은 컴퓨터 천재, ID명 플라그. 화일의 비밀을 감추기 위해 플라그는 데이드의 어머니를 담보로 병아리 해커들을 위협하는데…

여러분들은 영화 ‘해커즈’를 본적이 있는지? 위의 이야기는 바로 해킹을 소재로 삼은 ‘해커즈’의 줄거리이다. 약간은 엉성한 그리고 과장된 영화지만 보는 이로 하여금 영화에 빠져들게 하는 몇 가지 재미난 일들이 있다.

첫 번째, 최첨단 신소재인 바로 해커들의 이야기. 휘황 찬란한 네온 사인같은 미적 화면에다가 스피디한 전개 ,컴퓨터, 프로그레시브, 사랑과 도전, 롤러브레이드…

두 번째, 드라마틱한 해킹. 데이드의 전학 첫날, 졸리(영화에서의 이름이 생각않나는군.)는 데이드를 속여 비오는 날 학교옥상에서 비를 흠벅맞게 한다. 약이오른 데이드는 자신을 속인댓가로 정각 9시에 학교 스프링쿨러를 작동시키도록 프로그램을 고쳐놓아 똑같이 복수할 것을 다짐한다. 물론 데이드는 우산을 들고 시계가 9시가 되는 것만 보고있다(아주 그럴듯하군). 또, 해킹대결을 한 답시고 자신들의 적인(?) 보안수사대원을 신용카드정지에 경범죄, 교통위반 스티커, 결국은 서류상 사망에 이르기까지 해킹해 버린다…

세 번째, 해킹 과정이 아주 재미있다. 컴퓨터 게임을 하듯이 그래픽이 해킹과정 전반을 덮는다. 키보드를 마구 두드리면 미로처럼 꼬여있는 회로를 왔다갔다하고 고층빌딩같은곳을 오르락내리락(커널이 여기에서는 고층빌딩으로 표현된다. --;)거리면서 자료를 찾아낸다...이것말고도 프래킹이 등장하고 마지막 라스트 씬. 키스씬(오호..)을 배경으로 고층건물의 전기를 조작하여 불빛으로 하트모양을 연출하여 분위기를 팍팍?? 띄우기도 한다.

이런 것들을 보고 있자니 발끝에서 머리까지 피가 끓어 오르면서 나도 저런것들을 해보고 싶다는 욕망이 끓어오르는 것을 느낄 수 있는가? 만약 아니라면 해킹의 세계에 그리 관심을 갖고 있지 않다고 본다. 또는, 그렇다면 이 글을 읽을 준비가 여러분들은 되어 있다는 증거이다. 사실 여기에는 많은 부분이 과장되게 묘사되었다(아니.. 이미  알고 있었다구?). 진짜 해킹을 영화에서 보여준다면 그 영화는 아마 최악의 영화로 기록될 것이 뻔하기 때문이다. 그럼 어떤 것이 해킹인지 알고 싶은가? 여러분들 중 해킹에 대해 환상을 가지고 있다면 이 글을 다 읽었을 때 즈음 실망하게 될런지도 모른다. 이것은 정말 지겹고 따분하고 무료하고 재미없고 짜증나는 일일지도 모른다. 나도 가끔 이렇게 느낄 때가 많다. 하지만 마냥 재미만 있다면 나는 이것을 택하지 않았을 것이다(이거 누구들이 많이 쓰는 말인거 같은데?). 그렇게 무엇을 이루려면 부단한 노력을 기울이지 않으면 않된다. 계속 노력하고 시도하고  공부하다보면 어느샌가 해킹이란 놀이가 세상 어떤 놀이보다  재미있다고 느껴질때가 올  것이다(가끔, 아주 가아끄음~ 집어치우고 싶을만큼 재미없다고 느낄 때도 있다). 그럼 나와 함께 한 번 차근차근 살펴보자. 나는 해킹에 대해서도 다루겠지만 보안에 대해서도 소홀하지 않을 것이다. 창과 방패는 언제나 떨어질 수 없기 때문이다.

 

2. 해커? 해킹!

해킹을 하기전에 해커란 어떤 인물일까 알아볼 필요가 있다. 멋떨어지는 해킹기술을 구사하는 여러분들에게 친구가 ‘야~ 폼 나는데… 멋있어… 근데 해커가 뭐야?’ 라고 물었을 때 ‘아.. 해커란 말이지 해킹기술을 구사하는 사람이야’ 라는 바보같은 대답을 한다면 여러분들을 바라보는 눈초리가 달라질 것이다. 그럼 해커란 어떤 일을 하는 사람일까? 혹시 아는 분들이 있나? 잘 모르겠다구? 그럼 Guy L.Steele.의 hacker’s dictionay를 한번 살펴보도록하자.

Hacker:
1. A person who  enjoys learning the details  of computer systems and  how to stretch their capabilities - as opposed to most users of computers, who prefer to learn only the minimum amount necessary.

2. One  who programs  enthusiastically or  who enjoys  programming rather  than just theorizing about programming.

- Guy L.Steele. et al. The Hacker’s Dictionary

어디어디… 여러분들에게 친숙하지 않은 영어가 불쑥 튀어나왔다. 그럼 한번 읽어볼까나… 주어진 환경만을 사용하는 일반 사용자와는 구분되어 자신의 지적욕구를 충족하기 위해 자신의 컴퓨터 시스템이 할 수 있는 모든 것을 찾아보고 만들어 가는 사람들을 의미한다. 그리고 프로그래밍에 대한 광적인 집착력을 가진 사람으로 거듭되는 시행착오 속에서 정보공간에 잠입할 수 있는 능력을 갖춘 사람을 말한다. 라고 여기에 적혀있구만.. 초기의 해커들은 순수한 정열을 지니고 컴퓨터 실력을 발전시키는 사람들이었음을 알 수 있다. 그러나 현실로써 받아들여지는 해커의 의미는 왜곡되었다. 크래커들과 같이 취급당하기 때문이다. 불법적인 침입에 파괴적인 행위들을 하는 사람들로 말이다. 그럼 우리는 해커의 역사를 살펴봐야만 한다. 그래야지만 해커들이 얼마나 순수한 가슴으로 창작적인 행위를 했는지 알 수가 있기 때문이다.

해커라는 단어는 1960년대 미국  M.I.T 대학생들을 시작으로 전파되기 시작하였다. 그들은 컴퓨터를 광적으로 좋아하고 그들의 이상을 컴퓨터에 걸었다. 밤낮으로 컴퓨터에 매달려 새로운 프로그램을 만들고 토론하며 창조와 정의를 부르짖었다. 이것은 바로 대학 내의 대형 컴퓨터를 이용하다가 컴퓨터의 무한한 능력을 깨닫고, 그 위용을 일반 사회에 전달해야겠다는 정열과 의지로 일어났다. 그러한 결과 스티브워즈니악, 리차드스톨만, 스티브잡스와 같은 위대한 해커라 일컬어지는 인물이 탄생했으며 그들의 영향을 받아 현재와 같은 컴퓨터 환경을 구축하게 된 것이다. 초기에 그들은 구식 대형 컴퓨터를 이용하고 전화를 공짜로 사용하는 방법을 전파시켰으며 스스로 그러한 장비를 만들어 팔기까지 했다. 과거의 순수한 열정을 지닌 해커들은 거의 ‘히피’족이나 다름없는 이상을 이야기했다. 시간이 지나고 세상이 변하면서 초기 해커들의 숫자는 점차 줄어들었고 대다수 변질되어 본래 해커의 의미인 ‘정보의 공유화’가 아닌 ‘정보엿보기’가 되어갔다. 하지만 해커들이 남긴 업적은 대단했다. 그들은 아무나 널리 복사해서 사용할  수 있도록 “Copyright”에 반대되는 개념인 “Copyleft” 를 사용했으며 그 누구라도 출처만 밝히고 공익적인 것에 이용된다면 자신의 자료를 사용해도 된다고 적어놓았다. 그 결과 대표적으로 “Linux” 같은 공개 유닉스 운영체제가 탄생하여 오늘날까지 널리 사용되고 있다. 그 덕에 비싼 유닉스 운영체제를 공짜로 아무나 사용할 수 있게 되었으며 그로 인해 보다 더 좋은 각종 공개 프로그램들이 속속 생겨나고 있는 것이다. 해커들은 이것을 ‘GNU’라는 헌장으로 만들어 지키고 있다. 여러분이 진정한 해커가 되고자한다면 “GNU”헌장을 꼼꼼히 그리고 수긍할때까지 읽어보라. 단지 남에게 과시하고 골탕 먹이기 위해서 해킹을 한다면 해커가 될 자격이 없는 사람임에 틀림없을 것이다.

그럼 해킹에 대한 정의를 간략하게 하자.

시스템의 관리자가 구축해 놓은 보안망을 어떤 목적에서 건 무력화시켰을 경우 이에 따른 모든 행동을 해킹이라고 보면된다. 여기서 목적은 순수한 의도여야 한다. 지적 호기심 또는 일반적인 사용을 거부하고 색다른 맛을 느끼고 싶은 충동, 자기 발전정도? 정보공유화… 흠…

이제 해커와 해킹이 무엇인지 알겠는가? 해커라 불려지는 사람들은 순수한 정열을 지닌 사람들이다. 해커가 되려는 사람들 또한 그래야 될 것이고…(물론 강요는 없다. 그럴 마음도 없고… 다만 이건 Option 이다.) 여기 리처드 스톨맨의 GNU 선언문 중 일부를 올린다. 아직도 GNU가 무엇인지 리처드 스톨맨이 누구인지 그들의 순수한 의도를 모르는 사람들 혹은 해커를 꿈꾸는 사람들이 있다면 필히 읽어 볼 것을 권한다.
--------------
GNU 선언문

Copyright (C) 1985 Richard M. Stallman (Copying permission notice at the end.)

GNU란 무엇인가? Gnu’s Not Unix!

GNU는 유닉스와 완벽하게 호환하는 소프트웨어 시스템이며 사용 가능한 모든이가 무료로 사용하도록 작성한 것이다. 몇몇 다른 자원자들의 도움이 있었으며, 많은 시간적, 금전적 지원과 프로그램과 장비가 절실히 필요한 상태이다.

우리는 문서 형식기로 TeX를 사용할 것이며, nroff도 여전히 사용될 것이다. 또한, X 윈도우 시스템도 사용할 것이다. 이런 후에 Common Lisp, Empire, 스프레트시트 등과 수많은  다른 프로그램을 온라인 문서를 포함하여 추가할 것이다. 우리는 결국, 일반적인 유닉스 시스템의 모든 기능을 갖추게 될 것이다.
....... [ 지면상 생략 ]

나는 누구인가?

나는 리처드 스톨맨이란 사람이며 Emacs 에디터의 고안자이다. 나는 컴파일러, 에디터, 디버거, 명령어 해석기, 시분할체제와 리스프머신 운영체제에 관해 광범위한 작업을 해왔으며, ITS에서 터미널 비의존적인 출력장치를 개발했다. 그런 다음 리스프 기계를 위한 견고한(crashproof) 파일 시스템 하나와  두개의 윈도우 시스템을 구현했고,  지금은 세 번째 윈도우 시스템을 구상했으며, 이것은 GNU는 물론 다른 많은 시스템에 이식될 것이다.

왜 GNU를 작성해야만 했는가?

어떤 프로그램을 좋아 한다면 당연히 그것을  좋아하는 사람들과 함께 나누는 것이  황금률(대우 받고자 하는 대로 대하라.-성서)이라고 생각한다.
소프트웨어를 판매하는 사람들은 사용자를 각각 구분하고, 그들위에 군림하고, 사용자 서로가 프로그램을 공유하는 것을 막고자한다. 나는 이런 식으로 사용자간의 결속이 깨지는 것을 거부한다. 나는 올바른 양심으로 비공개 협정이나 소프트웨어 라이선스 협약에 서명할 수 없다. 여러해동안 인공지능 연구소에서 일하면서 그러한 경향과 다른 박정한 일들에 저항해 보았지만 결국에는 그들의 승리로 끝나고 말았다. 내의지에 역행하는 그런 일들이 일어나는 연구소에 나는 더이상 머무를 수가 없었다.

내가 계속해서 명예를 손상시키지 않고 컴퓨터를  사용하기 위해, 공개되지 않은 소프트웨어를 더이상 사용하지 않고도 작업을 해 나갈 수 있는 충분한 공개 소프트웨어의 본체를 만들 결심을 했다.
..... [ 지면상 생략 ]

결론:
* 컴퓨터 사용자 공동체는 소프트웨어 발전을 지원한다.
* 어느 수준의 지원을 할 것인가는 이 공동체가 결정한다.
* 자신의 몫이 어떤  프로젝트에 쓰일 것인가에 관심있는  사용자들은 이를 스스로 결정할 수 있을 것이다.
...... [ 지면상 생략 ]
------------

> 뒷 이야기
순수.. 순수.. 아악~ 닭살이 돋는다앗!!
헉헉헉… 사악한 내가 이런 이야기를 하자니 무척 힘이 들었다.
하지만 어쩌겠나? 해커들의 역사는 이렇게 시작되었는걸…
나는 여러분들께 윤리적인 이야기는 정말 하고 싶지 않았다구…
흐흐흐… 그런 것들을 강요하고 싶지도, 또 강요할 마음도 없었거덩…
모두 자신들의 선택인걸…

 

3. 크래커? 크래킹!

자신을 해커라고 큰 소리로 떠드는 또  다른 그룹의 사람들이 있다. 그러나 이들은 아니다.
정말 아니다. 그들은 컴퓨터에 무단 침입하여 자료를 파괴하거나 전화시스템을 파괴하는 사람들이다. 실제 해커들은 이들을 “cracker(크래커)” 라고 하며 그들을  무시한다. 불행하게도 많은 이들이 “해커”를 “크래커”로 착각하고 있다. 그래서 요즘 공식은 해커 = 크래커가 되버렸다. 불쌍한 우리들… T.T
특히 반사회적인 cracker는 문화예술을  파괴하려는 경향을 가지고  있어서, 파일 시스템을 삭제하고, 시스템을 파괴하고, 그들의 흔적을  추적하는 프로그램을 마비시킨다. PC의 복제 장치를 제거해서 불법복사본을 배포하는 사람을  가리키는 경우에도 크래커라는 말이 널리 쓰이고 있는 실정이다.

 

4. 보안

보안이란 자산의 본래 가치가 손상되지 못하도록 자산을 적절한 방법으로 보호하는 것을 의미한다. 컴퓨터 보안이란 개인이나 기관이 사용하는 컴퓨터와 관련된 모든 것을 안전하게 보호하는 것을 말한다(시스템의 하드웨어를 말할 수도 있으며, 시스템 내의 소프트웨어들을 말 할 수도 있다). 일반적으로 시스템의 정보를 보호하는 행위를 말한다. 인터넷 보안이란 말 그대로, TCP/IP 프로토콜을 통해 연결된 수많은 호스트들  사이에서 정보의 유출과
불법적인 서비스 이용을 방지하는 것이다.

해킹에도 기술들의 난이도가 있듯이 보안에도 등급이 존재한다.

TCSEC(Trusted Computer System Evaluation Criteria) : 보안을 실시한다고 할 때 과연 어느 정도로 정보가 안전한가를 객관적으로 판단하기 위하여 여러 단체에서 보안의 정도를 판별하는 기준을 세워 놓은 것이 있다. 그중 가장 귄위있는 것이 이것이다.

보안등급은 D, C, B, A 등으로 나뉘며 세부적으로는 다시 C1, C2,  B1, B2, B3 등으로 나뉜다. 보안은 등급이 A로 갈수록 강력하며 같은 등급 내에서는 뒤에 붙는 숫자가 클수록 강력하다.

·D 등급 : 보안이 거의  또는 전혀 고려되지 않은 상태로  주로 외부에 완전히 공개되어 있는
               PC등이 여기에 해당된다.

·C1등급 : 사용자가 서로 침범할 수 없게 되어 있다. 정보는 모두 사용자 단위로 접근 허가를
               줄 수 있어서 모든 사용자는 특정한 정보에 대한 접근(acess)권한만을 가질 수
               있다.

이 정도의 보안은 그렇게 강한 보안은 아니며 단지 사용자가 실수로 다른 사용자의 정보를 접근할수 없도록 한 정도이다. 보통의 UNIX시스템이 여기에 해당한다.

·C2 등급 : C1보다 약간 엄격한 정도로, 사용자들의 로그인(login)정보를 포함하여 보안과
                관계된 모든 로그정보를 저장해 두어서 필요할 때 보안감사(audting)를 할 수
                있도록 하는 정도의 보안이다. 이 정도는 되어야  비로소 안전하다고 할 수 있다.
                현재는 VMS ( DEC ), AOS / VS  ( Data  General )등이 C2정도의 보안등급임을                 NCSC(National  Computer Security Center)에서 인정하였다.
                현재 UNIX를 C2보안등급으로 바꾸어 주는 패키지들이 UNIX 클론(clone)제작
                회사들에서 만들어지고 있지만  NCSC에서 는 아직 인정해주지 않고 있다.

·B1등급 : 우선 C2의 모든 것을 포함하여야 한다 그 외에 보안정책이 있어야 하고 모든
               데이터는 각각 레이블을 붙일 수 있어야 한다. 레이블을 붙인다는 것은 자료객체
               (data object)에 보안등급 같은 것을 정해 놓을 수 있어서 낮은 보안등급을 가지고
               있는 사용자가 높은 보안 등급을 가지고 있는 정보에 접근하지 못하도록 하는
               것이다.

·B2 등급 : B2에서는 B1의 모든 것을 포함하고 보안정책도 일정한 형식을 가지고 정의가
                되어 있어야 한다. 보안정책은 시스템의 모든 데이터에 대하여 각각에 대한 접근
                방법을 여러가지로 정의할 수 있어야 한다. 이러한 보안은 소프트웨어만으로는
                불가능하며 하드웨어적인 뒷받침이 있어야 한다.

·B3 등급 : B2의 모든 것을 가지고 있어야 한다. 그리고 운영체제 내부의 보안과 관련된 코드
                에서 보안과 관련이 없는 것은 모두 제거되어야 하며 모듈의 크기가 작아서 분석과
                테스트가 가능하여야 한다.

·A1등급 : 이 등급은 B3과 거의 같다. 단지 차이가 있다면 그 시스템이 안전하다는 것을
               수학적으로 증명하여야 한다는 것이다. 그러기 위해서는 시스템  보안에 대한
               일정한 형식을 갖춘 모델이 있어야 하며 그것을 검증할 수 있는 방법도 제시되어야
               한다. 그러나 A1등급의 보안은 현실적으로 구축하지 못하는 실정이다.

관리자는 시스템을 어느 정도의 보안등급으로 구축할 것인지를 결정하여야 한다. 이때 주의해야 할 것은 보안등급이 높다고 해서 꼭 좋은 것은 아니다. 너무 엄격하게 보안을 유지한다면 사용자들의 불편이 그 만큼 커지지 때문이다. 물론 불편한 만큼 안전성은 좋다. 그러므로 관리자는 이 점을 충분히 고려하여야 한다.

 

4. INTERNET?

안녕, 여러분. 4장의 이야기는 인터넷과 관련된 이야기로 시작 할까한다. 해킹에 왠 인터넷이냐구? 묻지 말고 끝까지 읽어보시라. 그럼 다 알게 될것이야. - 아시는 독자도 있겠지만 말이다. 하지만 난 초심자를 기준으로 글을 쓰고 있다는 것을 잊지 말아주셔요오~
컴퓨터 앞에 앉아서 나의 글을 읽는 여러분들. 지금 인터넷을 사용중이겠지. 그럼 인터넷이란 무엇인지 아는 분들은 손! 손 한번 들어보라. 자신있게 손 들수 있는 분들이 얼마나 될까? internet이란 inter + network란 말씀. 사전에서 찾아보길 ‘inter : 무엇무엇사이의, 상호간의’ 라는 뜻이라고 나와있다. 그럼 네트워크는? ‘network : (전선, 혈과, 철도 등의)망상, 조직, 방송망, 회로망’. 아~ 그럼 상호간의 회로망이란 뜻이군. 망이란 원래 상호간에 연결이 되어있는 망이니깐 상호간의 상호간의 망이라는 말인가? 그렇다. internet이란 전세계의 컴퓨터를 연결하는 컴퓨터망을 나타내는 단어이다(이렇게 쉬운걸 너무 돌려말했나? 헤헷.. 난 너무 친절한게 탈이야... -.-;). 그렇담 인터넷이 무엇인지 어떻게 발전했는지 더욱 자세하게 알아야 되지 않을까? 왜, 오늘날 이렇게 해킹을 할 수 있는가도 여기에 담겨있다는 말씀. 이제 부터 해커란 단어는 오늘날의 뜻에 맞게 쓰는 것을 기억해두라. 그리고 그들이 하는 행위를 해킹이라고 하겠다. 나중에 설명할 해킹 기술들을 살펴보자면 현실적으로 오늘날의 해커들에게 더욱 잘 어울리는 기술들임을 알게 될 것이다( 혹 여러분들 중 창작적 정열에 불타서 순수한 해커가 되기를 바란다면 linux kernel을 만들어 보는건 어떨까? 정말 괜찮은 일이라구!!!!).

4.1 인터넷의 발전

1969년 미국에서는 군사용으로 사용할 목적으로 하나의 거대한 통신망을 미국내에 건설하기로 결정했다. 그리하여 미국국방성의 연구계획기관인 DARPA(Defense Advanced Research Projects Agency)에서 군사관련기관간의 정보 공유를 지원하기 위해서 하나의 통신망을 건설했는데 이것이 바로 그 이름 유명한 알파넷(ARPANET)이다. 바로 이것이 인터넷의 시초이다. 시간이 지나고 알파넷에 사용하는 프로토콜은 TCP/IP로 통일하게 되었고 그 결과 어떤 컴퓨터 기종이든지 상관없이 정보 교환이 가능하게 되었다. 이 때문에 알파넷의 사용자가 급격하게 팽창하게 되자 알파넷의 당초취지인 군사 목적에 해당하는 부분은 MILNET(Military Network)이라고 하는 새로운 통신망으로 떨어져 나가고 알파넷은 일반 사용자가 사용하는 통신망으로 변모하게 되었다. 한편, 미국 과학재단 NFS(National Science Foundation)에서도 같은 통신규약을 이용하는 NSFNET이라는 통신망을 만들어 운영하기 시작했다. 이 통신망은 미국의 다섯 군데 슈퍼컴퓨터 센터를 연결하는 전산망이다. 1980년대 들어와서 TCP/IP 프로토콜을 사용하는 알파넷과 NSFNET이 서로 연결하게 됨으로써 인터넷이라는 통신망의 근간을 이루게 된다. 그리고 점차 많은 수의 사람들이 몰려들고 통신망은 발전에 발전을 거듭하여 오늘날까지 오게되었다는  말씀. 그럼 여기에서 꼭 짚고 넘어가야 할 것들 몇 가지를 이야기 해 보겠다.

4.2 TCP/IP 와 그의 잔당들

TCP(Transmission Control Protocol)
TCP는 IP 상위의 트랜스포트계층의 대표적인 프로토콜로서 신뢰성 있는 데이터 전송을 목적으로 하는 프로토콜이다. TCP에서 모든 정보는 호스트간 연결(Connection)이 설정되어야 전달될 수 있으며, 이것으로 TCP를 연결 기반 프로토콜이라 한다.

IP(Internet Protocol)
IP는 비연결(Connectionless) 및 비신뢰성(Unreliable) 데이터 전송을 위한 프로토콜. 인터넷에서 가장 널리 사용되는 프로토콜로서 목적지까지 데이타그램(Datagram : IP에서 사용하는 데이터 전송 단위)을 전달하는 것이 목적.

ICMP(Internet Control Message Protocol)
ICMP는 IP와 같은 층에 살고 있는 프로토콜로써 네트워크의 오류를 감지하여 IP에 오류를 알림으로서 네트워크의 문제를 막는 역활을 한다. ICMP를 사용하는 대표적 프로그램이 Ping 이다.

SMTP(Simple Mail Transfer Protocol)
네트워크에서 TCP상위에 있으면서 메일의 전달을 목적으로 하는 프로토콜이다.

UDP(User Datagram Protocol)
UDP는 쉽게 말해 TCP와는 달리 신뢰성이 떨어지는 프로토콜이다. 데이타를 IP에게 보내기는 하지만 TCP와는 달리 잘 도착했는지 아닌지 까지는 책임을 지지 않는다. TCP와 비교해 좋은 점을 이야기하자면 머.. TCP보다 속도가 빠르다는 걸 이야기 해 줄 수 있지…

IP Address
네트워크에서 각 호스트들은 자기만의 주소를 가지고 있다. 즉, 호스트가 가지는 네트워크 주소는 유일하다는 것을 말한다. 여러분들과 내가 같은 주소를 사용하고 있다면 편지를 받거나 누가 찾아온다면 어디로 가야 할까? 사람들 사는 세상이야 같은 집에서 산다면 가능하겠지만, 컴퓨터들의 세상에는 어림도 없다. 컴퓨터들은 자기 집에 자신 혼자만 살도록 되어있다. 그런데 컴퓨터들은 숫자들을 아주 좋아해서 이 주소를 숫자로 만들어 놓았다. 쉽게말해 255.255.255.255, 127.0.0.1 같은 숫자로 된 주소들을 가리켜 IP Address 라고 한다.

Domain Name
그럼 여러분들은 이 숫자로 된 주소를 외우고 다녀야 할까? A는 123.213.77.6 B는 192.18.56.89… 에고에고 머리가 아파 온다. 이런 주소를 우리가 쉽게 외우도록 영문으로 표기하면 않될까? 물론 된다. 그래서 Domain Name이 나왔는걸… 이런 IP Address를 영문으로 표기한 것을 Domain name이라고 한다. 255.255.255.255를 salsari.org 로 외우면 얼마나 쉽고 편리한가?

DNS
그럼 IP Address를 Domain Name으로 어떻게 바꿀까? 그건 바로 DNS 서버라고 하는 것이 그런 역활을 해준다. DNS라 함은 ip address 를 domain name으로 또는 domain name을 ip address 로 바꾸어주는 것을 이야기한다.

> 더욱더 자세하게 알려면 TCP/IP 에 관한 책을 읽어보자. 그림까지 보여주면서 여러분들을 피토하게 할만큼 자세한 설명을 할 것이다.

자, 그럼 원론적인 이야기는 이쯤에서 닫고 그럼 조금 더 상세하게 들어가보자. 지금 인터넷을 통하여 내 글을 읽고 있다면 분명 웹(web)을 사용중일 것이다. 여러분들 중 린스를 사용하는 이는 없겠지? 인터넷 초심자들 중 ‘웹 = 인터넷’으로 통하는 이들이 많다. 하지만 노! no! NO! 웹이라는 것은 인터넷의 한 부분일 뿐(최근에 와서는 아주 중요한 부분이다.) 인터넷의 전부는 아니다. 우리 해커들은 이런 화려하고 누구나 사용할 수 있는 것들은 좋아하지 않는다.(단지 즐겨쓴다… ^^) 해커가 되려면 좀더 고상한 방법들을 깨닫고 이를 즐겨보자.

4.3 인터넷 서비스

WWW(World Wide Web)
인터넷의 기타 여러가지 서비스들이 텍스트 기반의 문자만을 전달하는 서비스였다면 이 웹(WWW)은 사운드, 그래픽, 동영상 등 거의 모든 형태의 데이터를 제공해준다. 그러므로 이는 멀티미디어 시대에 가장 잘 부응하고 있는 인터넷 서비스라 할 수 있지. 문자만을 보던 사용자들은 이 웹을 사용하게 되면서 멀티미디어에 반해 급격한 사용자의 증가를 낳게 되고 그에 따라 빠르게 인터넷 서비스 중 최고의 위치까지 오게 되었다. 사실 이 웹은 FTP, USENET, E-mail, Gopher등 왠만한 인터넷 서비스도 지원해준다는 사실을 잊지 말아야 할 것. 그게 큰 장점이지만 타 서비스들과 비교할 때 시간이 너무 오래 걸린다는 단점이 있다.

FTP(File Transfer Protocol)
FTP를 쉽게 말하자면 파일전송 서비스이다. 마치 하이텔이나 천리안의 upload, download 와 같다고나 할까? 여기에는 Anonymous FTP 라는 개념이 있는데 이것은 여러가지 프로그램을 모아 두고 인터넷을 사용하는 네티즌이라면 누구나 프로그램을 가져갈 수 있도록 하는 서비스를 나타내는 것이다. 사용방법을 간단하게 설명하자면 FTP 프로그램을 이용해서 계정(account)에 anonymous를 입력하고 암호(Password)에 여러분들의 E-Mail 주소를 입력하면 Anonymous FTP에 접속하게된다. 그리고 파일을 다운로드나 업로드하면 되지머.

Archie
인터넷에는 엄청나게 많은 anonymous FTP 서버들이 있지만 이 많은 서버들 중 여러분들이 원하는 프로그램이 어느 서버에 있는지… 한숨만 나올것이다. 바로 아키(Archie)라는 서비스가 이를 해결해준다. 아키는 여러분들이 원하는 프로그램이 어느 anonymous FTP에 위치해 있는지를 알려주는 서비스이다.

Telnet
하이텔에 접속하려 할때 이야기나 새롬데이타맨같은 소프트웨어를 실행시켜 전화를 걸어 접속하게 된다. 텔넷(Telnet)은 기본적으로 이와 같다고 할 수 있다. 하지만 다른 점이 있다. 그건 바로 인터넷상에서 Telnet 프로그램으로 접속한다고 보면된다.(혹은 유닉스(UNIX)에서..) 예전에 사용하던 한텀(Hanterm)이 Telnet 전용소프트웨어였고, 넷텀(Netterm)이나 새롬데이타맨, 이야기는 이런 Telnet기능을 가지고 있는 통신용 소프트웨어이다. 예전에는 만일 외국에 유학을 가있다고 한다면 하이텔을 사용하고 싶은 경우에는 국제전화를 걸어 접속을 해야만 했을것이다. 하지만 Telnet이 생기고 나서부터(하이텔이 이 Telnet서비스를 시작하고 나서부터다.)인터넷에 접속되어 있는 호스트라면 세계 어디에서도 이 Telnet으로 하이텔에 접속이 가능해졌다.

Gopher
여러가지 서비스나 자원들을 메뉴방식으로 찾아가도록 제공하는 서비스

Usenet(Usenet Newsgroup)
하이텔이나 천리안을 사용하다보면 여러분들은 때때로 게시판에 들리게 될것이다. 어떤 이들은 연예란에서 모 그룹을 비방하는 글이 있지 않을까? 혹은 모 여가수의 구설수는 올려져 있지 않을까? 기웃기웃거리게 될 것이고 할 말이 있다면 그 게시판에 글을 쓸 것이다. 또 다른 여러분들은 영화를 좋아해서 영화 게시판에 갈 것이고…
이처럼 유즈넷(Usenet)이란 여러 가지 분야에 걸친 일종의 거대한 게시판이라고 보면 될 것이다.

E-Mail(Electronic Mail)
E-Mail이란 컴퓨터 사용자간에 전자우편을 주고받을 수 있는 서비스를 일컫는다. 인터넷에 연결되어 있는 컴퓨터는 각각 자신의 주소를 가지고 있는 것과 마찬가지로 인터넷을 사용하는 사용자 각각마다 E-Mail을 주고받을 수 있는 주소를 가지고 있다(‘더 자세하게 말하자면 가질 수 있다.’이다. 인터넷 사용자들 중 없는 이들도 있으므로…).
이 메일주소를 통해 우편을 주고 받는 서비스를 E-Mail이라고 한다.

Mailing List
Mailing List는 E-Mail address를 가지고 있는 이가 이 서비스에 가입을 한후에 이곳에 메일을 보내게 되면 이곳에 가입된 모든 가입자들에게 자신이 보낸 메일이 복사해서 전달되게 하는 서비스이다. 그럼 어떤 경우에 많이 사용하게 될까? 어떤 주제에 대해서 계속적인 의견 교환을 하고 싶은 사람들에게 유용한 서비스겠지!
해킹이나 보안관련 메일링 리스트들이 많으니 이런곳에 가입하게 되면 최신의 정보를 얻을 수도 있다.

WAIS(World Area Information Server)
자료를 분산해서 보관하고 보관된 자료에 대한 관리를 해 주는 통합 서비스를 일컫는다.

IRC(Internet Relay Chatting)
인터넷 사용자간에 채팅을 할 수 있도록 제공하는 서비스를 말한다.

 

5. UNIX?

눈치가 빠른 여러분들은 인터넷에 이어 왜 내가 유닉스에 대해 말하려는지 이미 알아차렸을 것이다. 인터넷에 연결되어 있는 많은 서버들이 바로 이 유닉스로 되어있다. 우린 바로 이 유닉스를 해킹해야 한다. 왜냐구? 자세하게 이야기하겠지만 유닉스는 개방된 시스템 사용을 목적으로 만들어진 OS(Operation system)이다. 도스와 같이 폐쇄된 OS가 아니라 다중작업이라고 하여 여러가지 프로그램들을 한꺼번에 실행할 수도 있고 수많은 사람들이 동시에 사용할 수 있으며 자료 공유 면에 있어서도 우수한 성능을 발휘하는 그런 OS이다. 그리고 PC와는 디스크 자원이라든가 메모리 같은 면에서 많은 차이가 난다. 이런 컴퓨터를 마음대로 사용하고 싶지 않은가! 여러 사람들이 사용하다보면 당연히 그 자료 또한 많겠지? 무슨 자료들일까? 삼성같은 대기업 연구실의 1급 프로젝트도 있는건 아닐까? 생각 할 수록 마구마구 즐거워지는데… 더 이상 이야기하지 않더라도 왜 유닉스를 해킹해야 하는가를 여러분들은 이해했으리라 본다.

5.1 유닉스의 정의

UNIX시스템이란 컴퓨터 시스템을 효율적으로 사용하기 위한 시스템 관리 프로그램이다. 즉 쉽게 말해서 일종의 운영체제(Operation System : OS)인 셈이다. 위에서도 설명했지만 유닉스는 여러 사람들이 동시(Multi User)에 로그인(Login)하여 시스템을 사용할 수 있고, 여러가지 프로그램들을 동시에 실행할 수(Multi Tasking)도 있다. 메모리(Memory)나 디스크(Disk)등의 자원(Resource)의 공유가 용이하고…
이것뿐만이 아니라 여러가지 장점들이 많지만 이 정도만 알아둬도 유닉스가 어떤것인지 여러분들이 이해하는데도 충분할 것이다.

5.2 UNIX 시스템의 역사

1969년 UNIX의 역사는 시작되었다. UNIX는 그 유명한 “구석의 거의 사용되지 않던 PDP-7”에서 시작되었는데, Ken Thompson이 대표하는 Bell연구소의 연구진들이 General Electric 645라는 컴퓨터에 Multics라는 OS를 사용해 왔으나 상당한 불편함이 있었다.
그래서 프로그래밍 연구나 개발을 보다 쉽게 해 주는 컴퓨터 환경을 만들기 위해 PDP-7으로 단일 사용자인 UNIX의 제 1 버전을 개발하게 되었다. “Unix”의 이름은 Multics에서 다져졌음을 의도하여 생겼다. (처음엔 “Unics”라는 이름이 쓰여졌다. 그것은 UNiplexed Information and Computing System을 뜻한다.) 처음 10년동안, 유닉스 개발은 Bell연구소에서만 이루어졌다. 이 초기버전은 “Version n”또는 “Nth Edition”(메뉴얼의)로 이름붙여 졌으며, 그리고 DEC의 PDP-11(16비트)과 후에 VAXen(32비트)를 위해 만들어 졌다. 여기서 그들이 만든 중요한 몇몇 버전을 살펴보기로 하자.

1971 - V1 : 첫 번째 유닉스 버전으로, PDP-11/20에 어셈블러로 구현되었으며 fork()와 roff, ed 등을 포함하고 있었다. 이것은 특허준비를 위한 텍스트 처리 툴로서 사용되었다. Pipe()는 V2에서 처음 선보였다.

1973 - V4 : C 로 다시 만들어 졌는데, 이것은 OS의 가장 중요한 일대 사건이었다. 이것은 유닉스가 쉽게 수 개월안에 다른 하드웨어에도 포팅 될 수 있음을 의미한다. C 언어는 원래 유닉스 시스템을 위해 설계되었다. 그리고 그렇기 때문에 C 와 유닉스 사에에는 강한 시너지 효과가 있다.

1975 - V6 : 대학과 같은 Bell연구소 이외의 곳에서 많이 쓰여지게 된 버전이다. 이것은 또한 유닉스가 다양해지고 대중적인 인기를 얻게된 때의 버전이다. 1.xBSD(PDP-11)는 이 버전에서 나왔다. J.Lions는 이 버전을 기반으로 “A commentary on the Unix Operating System”을 발표했다.

1979 - V7 : 마지막 진정한 Unix라고 할 수 있는 버전으로 “improvement over all preceding and following Unics”라고 Bourne은 말했다. 그것은 완전한 K&R C와 uucp, Bourne shell을 포함하고 있다.  V7은 VAX에 32V로 포팅되었다. V7의 커널은 단지 40kbyte에 불과했다.

즉, UNIX 운영체제는 시스템언어의 90% 이상이 C언어로 쓰여졌고, 시스템 프로그램이 공개되어 있어 변경, 수정이 용이하고 간단하면서도 강력한 명령어를 가지며 하드웨어에 구애받지 않는 화일 시스템을 가지고 있어 각기 특성을 가지는 수많은 UNIX시스템이 발표되었고, 마이크로 컴퓨터 및 미니 컴퓨터의 표준 운영체제로서 더욱 각광을 받고있다.

여기서 잠깐 :
여러분들중 유닉스의 역사를 보고 머리가 아파오는 분들이 분명히 있을 것이다. 너무 고심하면서 읽지마시라. 즐기면서 읽어도 괜찮다. 못 외워도 괜찮다. (사실, 나도 잘 모른다. 외우는 사람이 이상한거지…) 전체적으로 어떻게 흘러왔는지를 알아 두시기 바란다.

 

6. Linux?

나의 글을 읽는 여러분들 중 현재 리눅스(Linux)를 사용하고 있는 분들도 있겠지만 대다수가 리눅스를 사용하지 않거니와 잘 모르는 분들이라고 생각된다. 우리 바로전에 UNIX에 대해서 살펴보았다. 그럼 리눅스는 뭐지? 대답은 아주아주 간단하다!!

리눅스는 자유롭게 배포할 수 있는 UNIX 버전이며 값비싼 스팍(SPARC)과 같은 고가의 워크스테이션 뿐만 아니라 일반 PC에서도 설치하여 사용할 수 있는 UNIX이다.

리눅스는 맨 처음 핀란드 헬싱키 대학의 리누스 토발즈(Linus B. Torvalds)가 재학중 취미 프로젝트로 시작하면서 만들어 진 운영체제이다. 리눅스(Linux)라는 이름은 다름 아니라 개발자인 리누스(Linus)와 UNIX를 절묘하게 합친 이름이라고나 할까?

리누스는 대학 수업중 교육용 유닉스로 불리는 앤디 타넨바움(Andy Tanenbaum)씨의 미닉스(Minix)를 배우면서 자신이 직접 ‘미닉스 보다 나은 미닉스’를 만들어 보겠다는 영감을 얻게 되어 밤낮없이 리눅스를 만들기 시작하게 되었다. 그 결과 1991년 10월 5일, 리누스는 그의 첫번째 공식적 리눅스 버전 0.02를 공개했다. 버전 0.02 에서는 GNU bash와 GNU C 컴파일러인 gcc가 동작되는 수준이었다고 한다. 그리고 유즈넷 뉴스그룹을 통해, 지금 막 탄생한 리눅스를 발전시키기 위한 토론이 활기차게 벌어졌으며 이것은 리눅스의 개발 역사의 특징인 인터넷을 통한 자발적인 협력 모델의 시작을 의미한다. 리누스가 소스를 공개함으로써 전세계 유닉스 해커들이 이 리눅스 개발에 달려 들었고 그 결과 현재의 리눅스까지 오게 된 것이다.

몇 가지 덧붙이자면 리눅스의 커널은 AT&T 나 다른 어떤 소유권자가 있는 소스의 어떤 코드도 사용하지 않았고 리눅스에서 사용할 수 있는 그 프로그램들의 대부분은 자유 소프트웨어 재단( Free Software Foundation) 의 GNU 프로젝트에 의해서 개발되었다. - GNU가 무엇인지 여러분들은 위에서 보았다. 모른다면 다시 읽어보기를 권한다. ( GNU(General Public License) 프로젝트는 재귀적 약어 “Gnu is Not Unix - GNU는 유닉스가 아니다”로 유닉스 호환 자유 소프트웨어 개발 프로젝트이다)

- 커널이 무엇인지 모르는 이들을 위해 :
커널은 운영체제의 중심이 되는 부분으로, 메모리 관리, 작업관리, 화일관리 등 컴퓨터 내부 기능을 조정하는 핵심이 되는 부분으로 모든 주변기기와 사용자 프로그램의 입/출력 업무를 처리해 준다. 커널은 모든 소프트웨어 중 하드웨어에 가장 밀접하게 연관되어 있고, 계층상 그 위에 놓인 시스템 소프트웨어, 애플리케이션 소프트웨어가 바라는 바를 대행해 준다.

- 리눅스의 특징 :
· 386SX이상의 x86 플랫폼에서 잘 동작한다
· 다양한 플랫폼을 지원한다.
   (x86, Motorola 68k, Digital Alpha, Sparc, Mips y Motorola Power PC)  
· 소스가 공개되어 있다.
· 리눅스는 무료다.(몇몇 유닉스 중에는 소스가 공개된 것도 있고, 무료인 것도 있다.)

- 리눅스 배포판이란? :
여러분이 리눅스 운영체제를 사용하려면 우선 리눅스 커널을 가져와야 하고, GNU 소프트웨어 X윈도우 소프트웨어를 가져와야 하며, 그리고 필요한 모든 자유 소프트웨어를 가져와서 구성해야 할 것이다. 하지만 이런 엽기적인 일을 할 사람이 과연있을까? (있다. 이런 사람들이...) 능력이 있으며, 의지를 가진 몇몇 개인이나 단체가 배포판(Distribution)이라는 이름으로 리눅스 운영체제를 구성하여 제공해 왔다. 초창기에는 커널과 바이너리 파일을 몇 개의 꾸러미 형태로 디스켓에 담아 ( C/C++ 컴파일러가 핵심이다. 나머지 파일들은 소스 형태로 받아 컴파일하여 사용하면 되기 때문이다.) 제공했지만 CD-ROM이 나오고 나서부터 필수적인 운영체제 구성 요소들을 바이너리 형태, 즉 설치하면 그 즉시 사용할 수 있는 형태로 제작되기 시작했다.

 - 대표적인 배포판들 : Redhat, Debian, Slackware, S.u.S.e

여러분들 중 이 글을 읽고 더욱더 유닉스와 리눅스에 대해 알고 싶다는 열정을 지닌분이 있을지도 모른다. 이런분들이 있으면 전문서적을 사서 읽어보기를 권한다.

--------------
참조 한 글:
unix-faq/faq/part6
Version: $Id: part6,v 2.9 1996/06/11 13:07:56 tmatimar Exp $
Ted Timar - tmatimar@isgtec.com
ISG Technologies Inc., 6509 Airport Road, Mississauga, Ontario, Canada L4V 1S7
----------------

혹시 이 글에 대한 내용 중 틀린글이 있거나 저작권에 위배된 내용이 있다면 저에게 메일주세요. 이재욱 E-Mail : salsari@hotmail.com

icon01.giftitle38.gif

이 재 욱 : salsari@hotmail.com

 

1. 실전 해킹에 들어가기 전에

자. 이제부터는 실전에 들어간다. 그 동안 인터넷이나 유닉스니 머리가 조금 아팠을껀데….
아흐~ 그 이론들이 바탕이 되어야지만 이 내용들을 이해할 수 있을 것이다. 실전에 들어가기 전에 알아두어야 할 용어들과 유닉스 사용법에 대해 설명할텐데.. 잘 따라 오시기를.
COME COME COME BABY!!

1.1 유닉스 이해하기

해킹은 실전이다. 그러므로 나는 여러분들의 컴퓨터에 리눅스를 설치하거나 여유가 있다면 계정을 하나 얻어 유닉스에 대해 공부하기를 추천한다. 이것도 저것도 여의치 않는다면 유닉스를 마음껏 쓰면서 해킹을 배울 수 있는 곳을 소개할까 한다. (유감스럽게도 몇몇 기능은 사용하지 못한다..) - 계정을 가지고 있거나 리눅스를 사용하고 있는 분들도 한 번 가보시라.

해커즈랩 - 해킹자유지대
[
http://www.hackerslab.org ]

관련 사항들은 해커즈랩 홈페이지를 참조하세요.

- 쉘 (shell)
쉘은 커널(Kernel)과 명령어(Command)사이에 있으며 사용자가 지정한 명령들을 해석하여 커널이 처리 할 수 있도록 전달해주는 중계역할을 하는 일종의 명령어이다.

- 프로세서 (process)
실행되는 프로그램과 그에 관계되는 정보를 말한다.

- 로그인 혹 로긴(Login)
유닉스는 여러사람이 사용하기 때문에 자신의 로그인명과 패스워드를 알아야지만 접속하여 그 자원들을 사용할 수 있다. - 컴퓨터와의 실질적인 연결과정

Trying 255.255.255.254...
Connected to jungmin.org.
Escape character is ‘^]’.

SunOS 5.6

login: salsari # 로그인명 - salsari라고 입력
Password: # 패스워드(화면에 나타나지 않는다.) - 패스워드 입력하자.
Last login: Fri Oct 8 19:17:37 from salsari.org # 패스워드가 맞으면 로그인 되지머..
Sun Microsystems Inc. SunOS 5.6 Generic August 1997
You have mail.
jungmin% # 쉘이 떴다. 접속 완료

- 로그아웃(logout)
유닉스 시스템 사용을 끝내고 싶을때, 그 시스템으로부터 빠져나오는 과정

% ^d  # Ctrl+d (때론 Ctrl + d 를 막아둔 시스템도 있다. 그럴 땐  logout을 입력하자.)
Connection closed by foreign host.

- bash 와 csh 의 차이점
로그인시 ‘$’ 혹은 ‘%’ 와 같은 쉘이 뜰것인데 전자가 bash(sh) 이고 후자가 csh(tcsh) 이다. 둘 다 사용은 비슷하지만 약간의 차이가 존재한다. 간단하게 짚어보자면

path 설정에 대해서...
bash(sh) : export PATH=”.:/bin:/usr/bin”
csh : set path = (. /bin /usr/bin)

- System V 와 BSD 유닉스의 차이점
이들도 bash와 csh의 차이처럼 사용하는 데에는 크게 다른 것들은 없다. 명령어 체계가 특징적으로 저마다 조금씩 다를뿐이다. 역시 간단하게 짚어보자.

System V

% ps -ef # % : csh - solaris 에서 실행
UID PID PPID C STIME TTY TIME CMD

 

BSD

$ ps -aux # $ : bash - linux 에서 실행하였다.
USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND
bin 163 0.0 0.6 900 384 ? S Sep 14 0:00 portmap
news 362 0.0 1.8 1668 1160 ? S Sep 14 0:01 /usr/sbin/innd -p4 -r
news 377 0.0 0.4 872 280 ? S Sep 14 0:00 /usr/lib/news/bin/ove
news 403 0.0 0.9 1244 616 ? S Sep 14 18:05 sh /usr/lib/news/bin/
nobody 20717 0.0 1.0 1180 684 ? S 17:05 0:00 httpd
……

 

root 0 0 0 8월 05 ? 0:12 sched
root 1 0 0 8월 05 ? 4:22 /etc/init -
root 2 0 0 8월 05 ? 0:08 pageout
root 3 0 1 8월 05 ? 648:44 fsflush
root 482 1 0 8월 05 ? 0:00 /usr/lib/saf/sac -t 300
root 401 1 0 8월 05 ? 0:00 /usr/lib/power/powerd
……

- 퍼미션(permission)
화일의 접근 허가를 나타낸 것.

예를 보자.

% ls -l # dos의 dir과 같은 기능
drwxr-xr-x 2 salsari users 512 10월 8일 19:18 .
drwxr-xr-x 194 root other 3584 10월 4일 10:57 ..
-rwx------ 1 salsari users 0 10월 8일 19:27 kkk
-rw-rw-rw- 1 salsari users 8 10월 8일 19:22 kkk1
-rwxrwxrwx 1 salsari users 29836 10월 8일 19:28 salsari.hwp
   

문자   의미           모드 값         의미
d       디렉토리      400             User (owner) 읽기 (r)
r        읽기            200             User 쓰기 (w)
w       쓰기           100              User 실행 (x)
x       실행            040             Group 읽기
-       불가능         020             Group 쓰기
                          010              Group 실행
                          004              Other 읽기
                          002              Other 쓰기
                          001              Other 실행

 

문자와 모드 값을 알아 두고 permission 이해 단계에 들어가자.

모두 [-] 의 갯수는 10개이다. (잘 모르겠으면 세어 보자. 분명 10칸일 것이다. ^^)
첫 칸이 [-] 이면 일반 파일, [d] 이면 디렉토리임을 알아두자.
다음 9칸은 세 필드로 나뉠 수 있다.
---/---/--- : [/]를 기준으로 첫 번째 필드가 user(소유주), 두 번째 필드가 group(그룹) 세 번째 필드가 other(기타 사용자)의 모드이다.
그럼 각 필드의 첫 칸이 읽기(Read), 두 번째 칸이 쓰기(Write), 세 번째가 실행(eXecution)이다. 위의 표로 따지자면 모드 값이 읽기(r)는 4, 쓰기(w)는 2, 실행(x)은 1 이다.
역시나 이해가 잘 가지 않을 꺼라 믿는다.. --; 확실한 예를 보자.

user 읽기 + user 쓰기 + user 실행 + group 읽기 + other 실행
r + w + x + r + x = rwxr----x
400 + 200 + 100 + 40 + 1 = 741

이제 알겠찌?... 꼭 기억해 두자. 그럼 한 번 퍼미션을 읽어 볼까나?

drwxr-xr-x 2 salsari users 512 10월 8일 19:18 .
# 현재 디렉토리
drwxr-xr-x 194 root other 3584 10월 4일 10:57 ..
# 부모 디렉토리
소유주는 읽고, 쓰고, 실행할 수 있고 그룹, 기타사용자는 읽고 실행만 시킬 수 있는 디렉토리를 뜻한다. [.]은 현재 디렉토리, [..]은 부모디렉토리를 나타낸다.(모드값 755)

-rwx------ 1 salsari users 0 10월 8일 19:27 kkk
시작이 [-] 이므로 일반 파일임을 알 수있다.

-/rwx/---/--- 이므로 소유주만 읽고, 쓰고, 실행할 수 있다.(모드값 700)

-rw-rw-rw- 1 salsari users 8 10월 8일 19:22 kkk1
일반 파일, 소유주, 그룹, 기타 사용자 모두 읽고 쓸 수 있다.(모드값 666)

-rwxr-xr-x 1 salsari users 29836 10월 8일 19:28 salsari.hwp
일반 파일, 소유주는 읽고 쓰고 실행할 수 있다. 그룹, 기타 사용자는 읽고 실행만 시킬 수 있다.

-Set user id
파일들을 살피다 보면 ‘-rws--x--x’ 와 같은 user 실행자리에 s 라고 표시되어 있는 것을 간혹 보게 될 것이다. 이처럼 user 실행 자리에 s가 붙어 있는 것을 setuid(set user id)라고 해서 이 파일을 실행시키는 동안 그 파일의 user(소유자)의 권한을 가지고 활동한다는 뜻이다. 그럼 이런 파일의 의미는?
우히히~~~ 다음 예를 보자.

-r-sr-xr-x 3 root root 88620 1999년 9월 15일 bash
파일명이 bash... 쉘임에 틀림없을꺼야. 소유자는 root, setuid가 붙어 있구만... 그럼 이 파일을 실행시키면 누구나 root의 권한을 가질 수 있다는 뜻이 되는군.. 너무 좋지 않은가? 저 파일만 실행시키면 여러분들이 root가 된다니.. 엄청난 신분상승인데...
보통 해킹후 쉘을 /usr/bin 과 같은 디렉토리에 이름을 바꿔서 복사시킨후 setuid를 걸어서 백도어로 사용한다.

        모드 값      의미                  비고
        4000         Set user id
        2000         Set group id
        1000         Sticky bit           공유모드

Sticky bit와 같은 것은 /tmp 디렉토리에 많이 사용된다.

drwxrwxrwt 2 root root 512 11월 8일 11:11 temp

예에서 보건데 누구나 /tmp 방에 파일이나 디렉토리를 만들고 지울 수 있지만 정작 지울 수 있는 것은 소유주가 여러분들로 되어 있는 파일과 디렉토리뿐이다. (흐흐.. 안타깝지..) 절대로 다른 사람들이 만든 파일을 지울순 없다. - 그래서 공유모드라네..

- 리다이렉션/파이프(|)

> file : 실행 결과가 file에 들어간다.
>> file : 실행 결과가 file에 추가된다.
< file : 입력값으로 file2 내용이 들어간다.
<< kkk : kkk문자열이 나타나면 입력이 중단된다.

> 여러분들이 직접 해봐야 될

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,056 명
  • 현재 강좌수 :  35,912 개
  • 현재 접속자 :  211 명