일상, 활동

DETS 1차시 수업 요약

$1m0hYa 2020. 6. 20. 11:28

Content

 

  1. 해킹이란?
  2. 우리가 앞으로 배우게 될 내용
  3. 리눅스의 역사와 multiuser system
  4. 리눅스해킹의 목적
  5. setuid
  6. 마무리

 

1. 해킹이란


우리는 일상생활에서 해킹을 실시간으로 접하고 있다.
컴퓨터, 핸드폰, 페이스북, 게임 등등 여러 해킹사건들이 발생하고, 언론에서도 많이 보았을 것이다.
그러나, 언론에서는 해킹이라는 의미를 좋지않은 의미로 쓰기도 한다.
그 이유는 여기에 있다.

 

원래 해킹은 나쁜 의미가 아니었다.
해킹은 컴퓨터를 연구하는 과정에서 느끼는 즐거움 또는 효율적인 코드를 만드는 행위 그 자체를 이야기 한다.
그리고, 이러한 컴퓨터에 매우 숙달된 사람을 해커라고 불렀고 해커는 우리의 IT기술을 점점 발전시켜 왔다.
그러나 나쁜 마음을 먹게된 해커는 점점 상용화되는 인터넷 시스템의 원리를 잘 알고 있었기에 이것을 이용하여서 은행의 돈을 뺀다던지, 누군가의 정보를 유출하며 옳지 못한 행위를 벌이고는 했다.
언론은 이러한 자극적인 내용을 보도하기위해 해킹이라는 단어를 자극적인 의미로 사용하게 된다.
이러하여 사람들은 해킹에 대해서 좋지 못한 이미지를 가지고 있는 것은 어쩔수 없는 일이다.

 

현재는 해킹의 의미가 여러가지로 나뉘게 된다.

먼저 취약점을 분석하고 탐색하며 옳은 목적으로 컴퓨터 기술을 이용하는 것을 해킹이라고 부르고,
취약점을 이용해 악의적 행위를 저지를 경우 크래킹이라고 부른다.

 

내가 생각하는 해킹의 특징은 두가지 이다.

 

첫번째는 창의성이다.

 

예를 들어서 이런 상황이 발생했다고 가정해보자

이러한 상황속에서 당신은 어떤 소원을 빌겠는가?

 

음.. 돈? 옷? 능력?

 

아마 이런것들을 떠올릴것이다.

하지만, 여기에 더욱더 좋은 생각이 하나있다.

 

바로 이거다!

이러한 소원을 들면 1가지가 아니라 100가지 소원을 더 들을 수 있게된다!

 

이렇게 해킹은 한발짝 뒤로 가보아 창의적인 생각을 하며 기발한 방법으로 시스템을 침투 해야한다.

 

두번째는 전문성이다.

 

시스템의 취약점은 기발한 방법으로 뚫리곤 한다.

아무리 모든 취약점을 패치하고 예방했다고 하더라도, 구멍하나를 놓치게 된다면 그것은 무용지물이다.

 

이것을 통해 해킹의 의미를 조금 알아보았다.

 

 

2. 우리가 앞으로 배우게 될 내용


우리가 앞으로 배우게 될 내용은 바로 시스템 해킹이다.
시스템 해킹이란 누군가의 시스템에 침투하여, 그 시스템에 존재하는 프로그램이나 운영체제를 해킹하여서 권한을 얻는 해킹을 말한다.

 

물론, 웹해킹이나 리버싱같은 분야도 있지만 그런것들을 하기위해서는 웹언어와 컴퓨터 구조를 정확히 알아야한다.

그치만, 시스템해킹은 C언어를 중심으로하기에 C언어를 배운 우리가 하기에 적합한 분야이다.

 

 

 

3. 리눅스의 역사와 multiuser system


우리는 앞으로 리눅스를 통해서 학습을 할것이다.

 

그 이유는 우리가 해킹할 대상의 컴퓨터나 서버는 거의 리눅스를 사용하고 있기 때문이다.

 

?? 리눅스여? 윈도우는 알아도 그건 뭐에요?

그리고, 사람들은 거의 윈도우를 사용하는데 갑자기 웬 리눅스?

 

맞다. 사실 리눅스는 일반인들에게 생소한 운영체제이다.

다들 원래 윈도우를 많이 사용하고 있을 거고, 맥도 많이 사용하고 있을텐데

리눅스는 거의 처음 들어볼것이다.

 

그러나, 리눅스에 대해 알게 된다면 리눅스의 매력에 푹 빠져들게 될것이다.

 

과거에 컴퓨터가 개발되고 한창 발전되고 있을 시기에 여러 운영체제들이 등장했다.

그중에서 리누스 토발즈라는 사람이 리눅스를 개발하였고 이러한 리눅스는 현재까지 많이 쓰이고 있다.

 

이러한 리눅스의 장점은 크게 2가지로 나눌 수 있다.

 

1. 오픈소스이다.

2. multiuser system을 지원한다.

 

리눅스는 오픈소스이다. 그리하여 여러 장점들을 확인할 수가 있다.

 

윈도우는 오픈소스가 아니다. 윈도우라는 운영체제의 개발방도는 마이크로소프트의 사업을 위해서 소스코드를 비공개로 해놓았을 것이다.

 

그러나, 리눅스는 오픈소스이기에 컴퓨터 개발자들의 이목을 끌었고, 리눅스에 관심을 갖게된 개발자들은 자신만의 리눅스를 만들거나 프로그램을 더 효율적으로 만드는 등 전세계가 함께 리눅스개발에 동참하였다.

 

그리하여, 리눅스는 매우 효율적이며 가볍다는 장점을 가지고있다. 그리고 다양한 계열의 리눅스가 만들어졌고, 엄청나게 종류가 많아졌다.

그중에서 가장 많이쓰이고 유명한 운영체제는 Ubuntu이다. 우리는 앞으로 이 운영체제를 이용할 것이다.

 

이러한 리눅스에서 지원하는 좋은 기능중 하나는 바로 Multi user system이다.

 

Multi user system이란 말 그대로 다양한 사용자가 같이 이용한다는 것이다.

 

이러한 시스템은 하나의 컴퓨터 또는 서버에 리눅스가 돌아가고 있으면, ssh또는 telnet등등 여러 방법을 이용해 원격 접속을 할 수 있다.

이러한 Multi user system의 장점은 무엇인가?

 

1. 공동 작업 수행이 가능하다.

하나의 컴퓨터에 접속을 함으로써 언제 어디서든 그 컴퓨터로 접속하여 작업을 한다면, 동시에 작업이 가능하고 또 이용도 편리하다.

2. 성능이 좋은 컴퓨터 사용가능하다.

자신의 컴퓨터가 성능이 좋지 않아서 사용에 불편함을 느낀다면, 성능이 좋은 컴퓨터에 원격접속하여 더 좋은 성능을 가진 컴퓨터를 이용할수 있다.

그 외 등등 다양한 장점이 있다.

 

 

이러한 리눅스는 현재 서버용으로 많이 애용되고 있으며 우리의 삶에 간접적으로 접해있다.

 

4. 리눅스의 해킹의 목적


위에서 언급했던 Multi user system은 원격으로 접속이 가능하고 공동작업이 수행이 가능하다.

이러한 이점으로 인해 현재 여러 회사나 그룹들이 리눅스 서버를 이용하여 업무를 진행하곤 한다.

 

그런데, 여기서 문제점이 하나가 생긴다.

 

리눅스 서버를 이용하게 될때, 중요한 파일을 함부로 열람하게 된다면 회사에 불이익이 생길수도 있고 산업 스파이에게 정보가 쉽게 넘어갈수도 있는 위험한 상황이 생길수도 있다.

 

이러한 대참사를 막기위해 리눅스에서 지원하는 기능인 권한설정이다.

 

권한설정은 사람들이 사용하는 계정마다 권한을 부여하여 중요한 내용을 함부로 열람할 수 없도록 하는 기능이다.

 

따라서 현재까지는 이런 권한설정의 기능을 사용하며 보안을 지키곤 했다.

 

그러면 리눅스의 해킹의 목적이 무엇일까?

눈치가 좋다면 바로 보일것이다.

 

그렇다. 바로, 자신의 권한을 상승시켜서 중요한파일까지 열람하거나 수정할수 있도록 하는 상황에 도달하게 하는것이다.

 

5. setuid


setuid란 특수한 작업을 수행할때 일시적으로 권한을 부여하는 기능을 말한다.

 

예를 들어, 회사에서 중요한 업무를 처리하기 위해서는 서버의 어떤 프로그램을 돌려야 하는데,

그 프로그램을 돌리기 위해서는 관리자 권한이 필요하다고 가정해보자.

 

이때, 이 프로그램을 실행시키기위해 잠시 사용자에게 관리자 권한을 부여하고 프로그램을 돌릴수 있도록 해준다.

그리고, 그 프로그램이 종료되면 다시 원래의 권한으로 돌아오게 된다.

 

이것이 바로 setuid이다. 

 

그럼, 이것의 문제가 무엇이냐?

 

바로 권한을 준다는것이다.

 

해커는 이렇게 생각할 것이다.

 

앗! 내가 이 프로그램을 돌리는 동안 실행흐름을 변조시켜서 관리자 권한을 이용해 중요한 내용을 수정하겠어!

 

그렇게 된다면, 해커는 프로그램의 취약점을 이용해 서버내에서 날뛰게 될것이다!

setuid는 좀더 효율적으로 프로그램을 실행하기위해 만들어진 기능이지만, 해커들이 이용하는 구멍이 되기도 한다.

 

우리는 바로 이 setuid를 이용해 서버내에서 권한상승을 해보는것이 목적이다.

 

물론 모의해킹 환경에서 말이다^^

 

 

6. 마무리


이번 DETS 1차시에서 배운 내용은 기본적인 리눅스 사용법과 리눅스 그리고 해킹이 일어나는 원리에 대해서 알아보았다.

다음 차시부터는 pwnable분야에 대해 좀더 알아볼 예정이다.

 

그렇다면 오늘의 내용 요약하자면

 

1. 해킹은 컴퓨터를 연구하는 과정에서 느끼는 흥미나 효율적인 코드로 개선하는것

2. 해킹은 의외로 창의성이 필요하며 전문성도 있어야 한다.

3. 리눅스는 많이 쓰이며 그중에서도 multi user system이 이번 수업의 관건이다.

4. 리눅스는 권한설정을 하는데, 이 권한을 상승시키는것이 해킹의 주 목적이 된다.

5. setuid라는 기능은 잠시 권한을 부여해주지만, 우리는 이것을 이용해 권한을 상승시키는 것이 가능하다.

 

그럼 다음 뎃츠에서 봐여~!