반응형

/etc와 /usr/etc 디렉토리는 시스템의 부팅, 셧다운 시에 필요한 파일들과 시스템의 전반에 걸친 설정 파일들 및 초기 스크립트 파일들이 있다. 시스템에 어떠한 문제가 발생한다거나, 시스템 전체 환경에 관한 설정을 바꾸기 위해서는 이들 디렉토리내에 포함되어 있는 파일들에 대하여 잘 알아야 한다.


/etc/rc :  /bin/sh shell이 시스템이 부트되면, 자동적으로 실행되는 스크립트이다. 이것은 update, crond, inetd 같은 프로그램을 백그라운드로 실행시키며, 파일 시스템 마운팅, 스웹 영역 활성, 그리고 이런 유사한 다른 작업들을 한다. /etc/rc.local 과 /etc/rc.[0-9] 파일이 포함되기도 한다.


/etc/passwd : 사용자에 대한 정보를 포함하고 있는 문서 파일이다.


/etc/fstab : 이 파일은 /etc/rc 파일 안의 mount -a 명령에 의해 마운팅되는 파일 시스템과 스웹 영역의 목록이다.


/etc/getty : 이 프로그램은 터미널로 누군가가 login하기를 기다린다. 명령어 init에 의해 자동적으로 실행되며, login가능한 터미널 라인이나 가상 콘솔 당 한번씩 실행된다. 또한, 사용자의 패스워드를 기다리며, login을 실행한다.


/etc/gettydefs or /etc/gettytab : getty가 터미널 라인의 속도, 패러티 검사 등을 어떻게 사용할 것인가를 설정한다.


/etc/group : /etc/passwd와 유사하며, 사용자 대신에 그룹을 설정한다.


/etc/init : 이 프로그램은 부팅 시에 커널에 의해 첫 번째 프로세스로 실행된다. init가 실행된 후에 커널을 부팅이 완료된다. init는 /etc/rc와 gettys 등을 실행한다.


/etc/inittab : init가 시작할 때의 gettys의 목록 파일이다.


/etc/issue : 로그인 프롬프트 이전에 출력되는 getty 출력 문서 파일이다.


/etc/magic : 명령어 file의 설정 파일이며, file이 파일의 형식을 알게 해주는 다양한 형식이 기술되어 있다.


/etc/mtab : 이 파일은 마운팅된 파일 시스템을 포함하고 있다. /etc/rc와 mount나 unmount 명령에 의한 셋업이며, 마운팅된 파일 시스템의 목록이 필요할 때 사용된다.


/etc/mtools : 유닉스 상에서 MS-DOS 포맷 디스크를 사용하게 해주는 mtools를 위한 설정 파일이다.


/etc/shadow : 시스템의 shadow 패스워드를 포함하는 파일이다.


/etc/login.defs : login 명령에 사용되는 설정 파일이다.


/etc/printcap : /etc/termcap 과 유사하며, 프린터를 사용할 때(lpr) 쓰인다.


/etc/profile : Bourne shell(/bin/sh or bash)에 의해 로그인할 때 실행되는 파일이다.


/etc/securetty : 터미널을 보안하는 것으로서, root는 이 파일에 열거된 터미널로 로그인 할 수 있다. 보통 가상 콘솔들이 열거되어 있으며, 모뎀이나 네트웤으로 시스템에 접근하여 수퍼 유저의 권한을 얻는 것을 막을 수 있다.


/etc/shells : shell의 목록으로 chsh 명령으로 사용자 로그인 shell을 바꿀 때, 이 파일의 목록에 있는 shell만 바꿀 수 있게 한다.


/etc/termcap : 터미널의 기능 데이터베이스이다. 이것은 문서 파일로서 ESCAPE 문자들로서 터미널을 제어할 때 사용된다.


/etc/ttytype : 터미널 라인을 위한 디폴트 터미널 형태의 목록이다.


/etc/update : /etc/rc 에 의해 백그라운드로 실행되는 프로그램의 하나로 매 30 초마다 버퍼 캐시에 있는 하드로 쓰여지지 않은 데이터를 저장한다. 이러한 것은 전원의 단절이나, 커널의 이상 등을 대비하여 매 30초마다 데이터를 저장함으로서 데이터 손실의 위험부담을 줄이는 것이다.


/etc/utmp : 각각의 터미널에 로그인한 사용자나, 로그인에 관한 정보가 기록되어 있는 이진 파일이다. 사용자가 로그인하면, login은 누가 로그인을 하고 언제 로그 아웃을 하였는가에 대한 정보를 기록한다.


/etc/wtmp : /etc/utmp와 유사하며, 단지 존재하는 정보를 덮어쓰지 않고 계속 추가된다.


/etc/ftpusers, /etc/ftpaccess, /etc/rpc, /etc/rpcint, /etc/exports  : 네트워크에 관한 파일들이다.

반응형
반응형

이번에는 리눅스 폴더 구조에 대해서 알아보는 시간을 갖고자 합니다.


리눅스 폴더는 기본적으로 역 Tree 구조로 되어 있습니다. 


root (/)라고 하는 파일시스템에 Tree 형태로 구조화되어 있습니다. 


리눅스는 기본적으로 모든 자원 (프로세스, 하드웨어, 네트워크 등등)을 파일로서 다루기 때문에 


기본적인 디렉토리 구조를 알고 있다면 추후 리눅스 관련 업무를 하는데 도움이 될 수 있다 생각합니다.


(PS. 물론 시간이 ... 약이기는 하죠)


그렇다면 기본적인 폴더 구조를 보고 각각의 폴더가 어떤 역할을 하는지 알아보도록 하겠습니다


root@choi:/# tree -L 1 -d

.

├── bin

├── boot

├── cdrom

├── dev

├── etc

├── home

├── lib

├── lib64

├── lost+found

├── media

├── mnt

├── opt

├── proc

├── root

├── run

├── sbin

├── snap

├── srv

├── sys

├── tmp

├── usr

└── var

 


지금 보시는 내용은 tree 라는 명령어를 이용해서 제가 사용하는 폴더 구조를 보고 계십니다. 일단 중요한 내용 부터 시작해서 각각의 폴더 역할에 대해서 알아보도록 하겠습니다.


1) proc 

가상 파일 시스템입니다. 이 디렉토리의 내용들은 시스템에서 운영되고 있는 다양한 프로세서들에 대한 내용과 프로그램에 대한 정보를 포함 하고 있습니다. 이 디렉토리에서 볼수 있는 내용은 실제 드라이브에는 저장되어 있지 않고 메모리 상에 저장되어 있습니다. 또한 다양한 정보 (CPU, Memory, Disk 등등)를 포함하고 있습니다.


2) sbin

시스템 관리를 위한 전반적인 실행 유틸리티를 담고 있습니다. 이 디렉토리에 있는 명령어들은 매우 위험도가 높기 때문에 일반사용자는 사용할 수 없으며 오직 root 권한만 실행 가능합니다.


3) bin

기본적인 실행 파일(ls, cat, echo ...)들이 모여있습니다. 


4) dev

디바이스 드라이버들이 모여 있습니다. 이것들은 시스템 디바이스나 자원들을 접근하는데 사용합니다


5) etc 

시스템의 부팅, 셧다운시에 필요한 파일들과 시스템 전반에 걸친 설정 파일, 초기 스크립트 파일, 일부 애플리케이션의 설정 파일들이 있는 디렉토리 입니다.  시스템 전체 환경에 관한 설정을 바꾸기 위해서 이 디렉토리에 대한 이해가 필수적으로 필요합니다 

(* 추후 심화 Reporting)


6) sys

proc 과 유사한 가상파일 시스템입니다. 이 부분은 초기 리눅스에서는 없었으나 커널이 점점 커지고 내용이 많아지면서 등장하게 되었습니다. 기본적으로는 시스템 전반을 모니터링 하고 일부 커널 파라미터의 설정을 바꾸기위해 사용 됩니다.


7) boot 

환경 설정 파일을 제외한 부팅과정에서 필요한 모든 구성요소들이 포함 되어 있습니다. (UEFI 모드)


8) lib/lib64

부팅과 시스템 운영에 필요한 공유 라이브러리와 커널 모듈이 위치합니다.


반응형
반응형



이번에는 리눅스 베포판에 대해서 알아보고 리눅스 베포판 동향에 대해서 알아보겠습니다.


리눅스 베포판에서 가장 많은 점유율을 갖고 있는 것은 Ubuntu, Mint, Red Hat, Fedora, Gentoo, Debian, OpenSUSE가 있습니다.


먼저 Ubuntu는 가장 대중적으로 많이 사용하고 있는 배포판입니다. 가장 많이 사용하게 된 원인은 저의 개인적인 생각이지만 구글에서 안드로이드의 개발 기본 플랫폼으로 사용하게 되면서 많은 오픈 소스에서 레퍼런스로 사용하고 있습니다. 또한 우분투는 기본이 되는 Unity Ubuntu, LUbuntu, XUbuntu, KUbuntu 등 다양한 버전의 Ubuntu가 개발되고 사용되고 있으며 각자 개인의 입맛에 맞게 사용하고 있습니다. 그리고 Ubuntu는 개발자들이 많이 선호하는 베포판인 만큼 최신 버젼의 소스 코드를 유지하고 있습니다


다음은 Mint 입니다. 그림에서는 '악당같은' 이란 표현이 되어 있습니다. Mint는 악당같이 Ubuntu의 장점을 취합해서 만든 베포판 입니다. Mint는 Ubuntu의 가장 큰 단점이 었던 '무거움'을 많이 해결 했지만 아직... Ubuntu와 같이 대중성 확보하고 있지 않습니다.


Debian은 앞서 이야기 했던 Ubuntu와 Mint의 아버지 뻘 되는 베포판 입니다. 흔히 리눅스 베포판을 Debian 계열, Red Hat 계열로 나누게 되는 만큼 Debian은 역사와 전통이 있는 데포판입니다. 그만큼 안정성에서는 타의 추종을 불허 하지만 보수적인 성격 탓에 최신 버젼의 소스를 반영하는데 부정적입니다.


다음은 Red hat과 Cent OS입니다. Red hat은 Cent OS와 같은 베포판을 갖고 있습니다. 둘의 차이점은 유료와 무료라는데 있습니다. 또한 Red Hat은 기업에서 운영하는 만큼 운영체제외에 다른 소프트웨어를 묶어서 솔루션을 제공하는 점이 핵심 입니다.


반응형
반응형

TCP/IP는 본질적으로 해킹에 취약하다. 연결 설정 및 통신 과정에 많은 문제를 가지고 있다.

  1. 클라이언트에서 서버로 최초 연결을 시도하는 SYN 패킷을 전송하면 서버는 연결을 위해 버퍼 자원을 할당한다.
  2. 장상적인 통신연결이 완료된 후에 해커는 클라이언트를 가장해서 통신 세션을 쉽게 가로챌 수 있다.
  3. IP헤더에 있는 소스 IP 정보는 쉽게 위조 가능하다.

네트워크 해킹 기술

  • 포트 스캐닝
    • IP서버를 식별하는 논리적인 주소다. Port는 하나의 IP를 여러개의 애플리케이션이 공유하기 위한 논리적인 단위다.
    • IP는 IP프로토콜에서 식별자로 사용되고 PORT는 TCP/UDP 프로토콜에서 식별자로 사용된다.
    • 포트스캐닝 (Port Scanning)은 서비스를 위해 방화벽이나 서버에서 개방한 포트 목록을 알아내는 기술이다.
    • UDP 기반 기법은 UDP패킷을 전송해서 확인
    • TCP  기반 기법은 SYN, FIN등 다양한 패킷을 전송하면서 포트 개방여부를 확인한다.


  • 패킷 스니핑
    • TCP/IP 통신을 하는 이더넷(Ethernet)기반 동일 네트워크 환경 (하나의 라우터를 사용)에서 MAC 주소 기반으로 패킷이 동작한다.
    • 패킷 스니퍼 (Packet Sniffer)는 모든 패킷을 버리지 않고 처리해서 동일 네트워크에서 이동하는 모든 데이터의 흐름을 한눈에 파악 가능


  • 세션 하이재킹
    • 세션 하이재킹(Session Hijacking)공격은 크게 HTTP 세션 하이재킹과 TCP 세션 하이재킹으로 나뉜다.
    • HTTP 세션 하이재킹은 웹 서비스 인증정보를 저장한 쿠키의 Session ID 값을 탈취해서 해킹에 이용하는 방식
    • TCP 세션 하이재킹은 TCP 패킷 정보를 탈취하는 방식
    • TCP 프로토콜은 통신 상대방을 인증하기 위해 IP, Port, Sequence Number 3개 요소를 사용
    • TCP 세션 하이재킹은 패킷 스니핑을 통해 알아낸 인증 정보를 가지고 클라이언트와 서버 사이의 통신을 중간에 가로챈다.
    • 해커는 클라이언트와 서버와의 연결을 잠시 끊고 발신지 IP를 해커 PC로 변경해서 서버와 커넥션을 재설정한다. 서버는 통신 연결이 잠시 끊겼다가 다시 연결됐다고 생각하고 해커 PC를 클라이언트로 인식하게 된다.


  • 스프핑
    • 스푸핑의 사전적 의미는 '위장하다'이다
    • 네트워크 관점에서는 크게 DNS, IP, ARP 3개의 자원에 대해서 위장을 통한 공격이 가능하다.
    • ARP는 IP 주소를 가지고 MAC 주소를 알아낸다. 
    • PC는 내부에 IP와 MAC정보가 저장된 ARP 캐시 테이블을 가지고 있다. 통신 상대방을 인지하기 위해 해당 테이블을 조회해서 MAC 정보를 추출한다.
    • ARP 캐시 테이블에서 정보를 찾지 못하면서 ARP 프로토콜을 통해 IP에 해당하는 MAC정보를 찾을 수 있다.
    • ARP 프로토콜은 보안이 고려되지 않았기 때문에 쉽게 해킹할 수 있으며, ARP Reply 패킷을 통해 상대방의 ARP 캐시 테이블을 간단하게 조작할 수 있다.

  • DoS (서비스 거부 공격)
    • TCP/IP는 구조적으로 보안에 취약하다. SYN 패킷의 발신지 주소를 변경하거나, SYN 패킷만 지속적으로 전송하고, 대량의 IP 패킷을 작은 단위로 쪼개서 전송하는 등의 행위를 통해 시스템을 서비스 불능상태로 만들 수 있다.
    • DoS는 정상적인 패킷을 대량으로 발생시켜 서비스를 마비시킨다. 
    • 또한 불특정 다수의 PC를 좀비 PC로 만들고 원격에서 대량의 트래픽을 발생시키는 시키도록 제어하는 분산 서비스 거부 공격 (DDoS)이 등장
    • 분산 서비스 거부 공격 (DDos)는 봇넷을 활용한다.
    • 봇넷은 악성코드가 포함된 파일을 인터넷을 통해 배포해서 다수의 좀비 PC를 확보하고 C&C서버를 통해 좀비 PC를 통제하는 기술이다.


반응형

'해킹의 기술' 카테고리의 다른 글

웹 해킹  (0) 2018.07.17
애플리케이션 해킹  (0) 2018.07.16
반응형

컴퓨터 시스템은 본질적으로 해킹에 취약하다. 컴퓨터가 처음 만들어졌을 때는 보안보다는 기능서에 초점을 두었기 때문이다. 컴퓨터가 제공하는 다양한 기능은 사용자에게게 편의성을 제공하는 한편 해커에게는 공격을 위한 수단을 제공한다.


웹은 기본적으로 인터넷 브라우저, 웹서버, 데이터 베이스 3개의 요소로 구성된다

  • 인터넷 브라우저는 사용자의 입력을 처리하고 웹 서버로 부터 받은 데이터를 가공해 화면을 구성한다.
  • 웹서버는 HTTP 요청을 분석해 정해진 기능을 수행하며, 데이처 처리가 필요한 경우 데이터베이스를 연결해 관련 작업을 수행한다.
  • 데이터베이스는 데이터를 안전하게 관리하면서 자료입력과 조회 기능을 수행한다.

해커는 웹이 지원하는 기능을 악용한다. 파일 업로드 기능을 이용해서 웹 셸 파일과 악성코드를 업로드한다. 업로드한 파일의 위치를 알아내 웹 셸 파일을 실행하면 해커는 웹 서버를 장악할 수 있다.  사용자입력 기능을 이용하면 SQL 인젝션 공격을 할 수있다.비정상적인 SQL 쿼리문을 입력해 얻을 수 있는 웹 서버의 오류메시지를 분석하면서 공격한다.


거의 모든 기업에서는 방화벽, IPS, IDS와 같은 보안 장비를 도입해 해킹을 차단하고 있다. 하지만 웹 서비스를 지원하기 위해 몇 개의 포트는 어쩔 수 없이 인터넷에 노출해야 한다. 이를 보완하기 위한 웹 방화벽과 같은 장비가 등장하고 있지만, 웹은 해커들에게 가장 매력적인 공격 대상이 된다.


웹 해킹 기술

  • XSS
    1. XSS(Cross-Site Scripting)는 게시판 게시물에 악성코드를 포함하는 스크립트를 심어놓고 게시물을 읽는 사용자 PC에서 개인정보를 추출하는 해킹 기법이다.
    2. 악성코드는 대부분 스크립트 코드이며 쿠키를 읽어서 특정 URL로 전송하는 기능을 수행한다. 게시물을 읽은 사용자는 자기도 모르느 사이 개인정보가 유출된다.
    3. 현재는 보안강화와 보안장비 발달로 공격빈도가 많이 줄어들었다.

 


  • CSRF
    1. CSRF (Cross Site Request Forgery)는 게시판에 악성코드를 삽입하고 사용자가 해당 게시물을 읽었을 때 공격이 수행된다는 점에서 XSS와 유사하다.
    2. 차이점은 XSS는 사용자 PC가 개인정보를 유출하지만 CSRF는 사용자 PC를 통해 웹서버를 공격한다는 점이다.
    3. 해킹 유형은 웹서버에 대한 무력화 시도일 수도 있고 정보 유출을 위한 공격일 수도 있다.

 


  • 피싱 (Phishing)
    1. 피싱은 은행이나 증권사이트로  비슷한 웹사이트를 만들어 놓고 사용자의 금융정보나 개인정보를 탈취하는 기법
  • 파밍 (Pharming)
    1. DNS를 해킹해서 정상적인 도메인 이름으로 호출해도 위장 사이트가 전송되게 하는 해킹 기술이다.
    2. 위장 사이트의 IP가 사용자 브라우저에 전송되면 사용자는 해커가 만든 웹사이트에 개인정보를 입력하게 된다
  • SQL 인젝션
    1. SQL 인젝션은 HTML 태그를 활용한다.
    2. 다양한 비정상 SQL 문을 반복적으로 입력하면서 데이터를 관찰하면 시스템 해킹이 가능한 적당한 SQL 문을 얻을 수 있다.
  • 웹 셸
    1. 웹쉘은 웹에서 제공하는 파일 업로드 기능을 악용한다.
    2. 먼저 서버를 원격에서 조정할 수 있는 파일을 웹서버를 통해 업로드 하고, 해커는 업로드 한 파일 위치를 파악하고 접근 가능한 URL을 찾아낸다.
    3. 해커는 이 URL을 통해 웹 셸 파일을 실행해서 운영체제를 통제 할 수 있는 강력한 권한을 획득할 수 있다.


반응형

'해킹의 기술' 카테고리의 다른 글

네트워크 해킹  (0) 2018.07.20
애플리케이션 해킹  (0) 2018.07.16
반응형

PC와 서버에서 운영되고 있는 많은 애플리케이션은 C언어를 기반으로 만들어 집니다. C언어는 커널에서 제공하는 강력한 API를 직접 호출할 수 있으며 이러한 기능은 사용자에게 다양한 편의성을 제공하지만 해커에게는 공격기술을 제공하기도 합니다. 




디버거는 애플리케이션을 개발할 떄 반드시 필요한 도구입니다. 프로그래머는 디버거를 이용해서 단계별로 애플리케이션을 실행하고 오류의 원인을 찾아냅니다. 디버거는 특정 이벤트가 발생하거나 API가 호출되면 하던일을 잠깐 멈추고 다른 기능을 실행하거나 메모리 상태를 기록할 수 있습니다. 이때,  개발자들은 이런 디버거의 기능을 이용해서 오류의 원인을 분석하지만 해커는 악성코드가 실행되도록 유도 합니다.


애플리케이션 해킹 기술

  • 메시지 후킹
    1. 메시지 후킹은 user32.dll의 SetWindowsHookExA() 메서드를 이용합니다. 
    2. 윈도우는 키보드, 마우스 등에서부터 들어오는 메시지를 훅 체인(hook chain)을 통해 처리한다.
    3. 훅 체인(hook chain)은 메시지를 처리하는 일련의 함수 포인터를 모아 놓은 리스트다. 
    4. 훅 체인 상에 강제적으로 프로그래머가 원하는 처리 프로세스에 대한 포인터를 동록하면 메시지가 들어올 때 원하는 작업을 할 수 있다.
    5. 대표적인 해킹 기법인 키 로거 (Key Logger)가 이 방식을 이용한다. 키보드 입력 메시지를 중간에 가로채 해커에게 전송하는 것이다.

  • API 후킹
    1. API 후킹은 운영체제에서 제공하는 디버깅 프로세스를 이용한다.
    2. 디버거를 이용해서 애플리케이션 특정 명령어에 중단점(BreakPoint)을 설정하고 특정 메서드를 수행하도록 등록한다.
    3. 애플리케이션은 작업을 수행하다가 중단점을 만나면 등록된 메서드를 실행한다.
    4. 이 메서드를 콜백 메서드라고 하는데 여기에 해킹 코드를 심어 놓으면 해커가 원하는 동작을 수행 할 수 있다.
    5. 예를 들어 메모장(notepad) 프로세스의 WriteFile() 메서드에 중단점을 설정했다면 저장 메뉴에 클릭하는 콜백 메서드가 호출된다





  •  DLL 인젝션
    1. DLL 인젝션은 동적으로 사용할 수 있는 라이브러리인 DLL을 애플리케이션에 삽입하는 기술이다.
    2. 총 3가지 방법이 있는데, 첫째 레지스트리를 사용한 것이다. 먼저, 레지스트리의 특정 위치에 원하는 DLL 이름을 입력해 놓는다. user32.dll을 호출하는 애플리케이션의 경우 해당 위치에 입력된 DLL을 메모리에 로딩한다.
    3. 둘째는 후킹 함수를 사용한 것이다. 즉, 특정 이벤트가 발생했을 때 DLL을 로딩하는 후킹 함수로 등록하는 것이다.
    4. 마지막은 실행 중인 애플리케이션에 원격스레드를 생성해서 DLL을 삽입하는 것이다. 윈도우에서는 CreateRemoteThread()함수를 제공해서 원격 스레드를 생성을 지원
  • 코드 인젝션
    1. 코드 인젝션(Code Injection) 기법은 스레드를 활용한 DLL 인젝션 기법과 유사하다. 차이점은 여기서는 DLL 대신 직접 실행가능한 쉘 코드 (Shell Code)를 삽입한다.
    2. 코드 인젝션의 장점은 DLL을 미리 시스템 특정 위치에 저장할 필요가 없고 속도가 빠르며 노출이 쉽다.
    3. 그렇지만, 쉘코드의 특성상 복잡한 해킹 코드를 삽입할 수 없다는 단점


반응형

'해킹의 기술' 카테고리의 다른 글

네트워크 해킹  (0) 2018.07.20
웹 해킹  (0) 2018.07.17

+ Recent posts