Ethernet

Outline

  • 분산 컴퓨터 사이의 데이터 교환 통신 체계(IEEE 802.3)
  • 현대 LAN, MAN, WAN 환경의 대부분을 차지하는 네트워크 구성 방식
  • CSMA/CD 프로토콜 활
  • 인터넷 프로토콜을 통해 광범위한 통신 가능
  • 네트워크에 연결된 각 기기들이 가지고 있는 고유의 MAC 주소(48bit)를 이용하여 상호 간 데이터 송수신
  • OSI 모델에서는 물리 계층(신호와 배선), 데이터 링크 계층(MAC 패킷과 프로토콜 형식 정의) 모두에 포함
자세히 보기

함수 프롤로그와 에필로그

개요

프로그램에서 함수의 호출은 어떤 과정으로 일어날까? 메모리의 스택 영역에는 함수가 호출될 때, 호출된 함수와 관계된 지역변수와 매개변수가 저장된다. 만약 프로그램이 함수를 여러 번 호출하거나 함수 내부에서 또 다른 함수를 호출한다면, 여러 함수들의 정보가 스택 영역에 저장될 것이다.

간단한 C 언어 소스코드와 컴파일된 main 함수 어셈블리 코드를 살펴보자.

1
2
3
4
5
6
7
8
void function(int x){
}

int main(){
function(0);

return 0;
}
[코드1. 간단한 C언어 소스코드]
자세히 보기

OWASP Top 10 - 2017

해당 글은 2017년에 발표된 문서를 기준으로 작성되었습니다. 참고하여 읽어주시길 바랍니다.

OWASP란?

Open Web Application Security Project(OWASP)는 소프트웨어 보안 향상을 위해 여러가지 일을 하는 오픈소스 프로젝트이다. OWASP에서는 세계적으로 많고 다양한 구성원들이 속해있고, 여러 회사 혹은 개발자들의 웹 보안 기술을 지원한다. 주로 웹의 보안 취약점, 악성파일 및 스크립트 등을 연구하며, 2004년 이래로 3~4년에 한 번씩 10대 웹 어플리케이션 취약점(OWASP TOP 10)을 발표했다.

OWASP Top 10은 웹 어플리케이션에서 발생할 수 있는 심각한 보안 위험들을 몇 가지 평가 기준에 맞춰 선별한다. 발표 내용에서는 공격가능성, 취약점 확산정도, 취약점 탐지 정도, 기술적 영향을 구분해서 각각의 위험도를 평가했다. 시간이 지날 때마다 쏟아지는 신기술과 그에 따라 발생하는 수많은 보안 위협 대비책이 될 수 있도록 방향성을 제시한다.


자세히 보기

[FTZ] training10

드디어 마지막 트레이닝입니다. 이번에는 로컬 해킹시 핵심인 SetUID에 대해 알아봅니다.

해킹에는 Remote 해킹과 Local 해킹 두 가지가 있습니다. Remote 해킹은 자신이 해킹하고자 하는 서버에 아이디를 가지고 있지 않을 때, 아이디를 얻으려 시도하는 것입니다. 다른 하나는 Local 해킹입니다. 이것은 해킹하고자 하는 서버에 일반 계정을 가지고 있을 때, 관리자 권한(root)을 얻으려 시도하는 것입니다.

Remote 해킹 방법엔 무작위로 아이디와 비밀번호를 입력해 접속하는 방법부터 데몬 취약점을 공략하는 방법, 게시판과 방명록을 이용해 접속하는 방법 등 수많은 방법이 있다고 합니다.

하지만 루트 권한을 얻는 과정이 가장 중요하기 때문에 Local 해킹이 중요합니다.

자세히 보기

[FTZ] training9

드디어 이전부터 계속해서 얘기했던 리눅스의 권한에 대해 작성합니다. 권한에 대한 개념은 해킹에서 가장 핵심적인 부분이고 FTZ 워게임에서도 이 개념을 알아야만 문제를 해결할 수 있습니다.

권한permission

리눅스는 윈도우와 달리 한 서버에 여러 사용자가 접속하여 사용합니다. 사용자가 어떤 서버에 아이디를 갖고 있다면, 그 계정이 할당된 공간에 홈페이지를 만들거나, 파일을 업로드, 생성하는 등 여러 작업들을 할 수 있습니다. 이 때, 다른 사용자가 이 사용자의 파일에 접근하지 못 하도록 막을 수 있는 개념이 권한(Permission)입니다.

만약 권한이 없는 파일에 접근하려한다면 Permission Denied라는 에러메시지가 출력됩니다. 이처럼 리눅스는 각 사용자마다 특별한 권한을 부여하여, 그 권한의 범위를 넘어서지 않는 파일들만 제어할 수 있도록 설정되어 있습니다.

자세히 보기

[FTZ] training8

이번에는 새로운 파일을 생성하고, 소스코드를 만들어 컴파일하고 실행하는 방법을 설명합니다.

파일의 종류는 두 가지가 있습니다. 먼저, 일반 텍스트 파일입니다. 이것은 윈도우에서 우리가 메모장으로 생성한 .txt의 파일이나 training을 하며 cat명령으로 내용을 출력했던 파일들입니다. 다른 하나는 프로그램 소스파일입니다. 소스파일 역시 텍스트 파일이지만 보통 이 파일은 컴파일과정을 거쳐 실행 가능하도록 만든 후 사용합니다.

텍스트 파일 생성 방법

  1. 프롬프트에서 cat > [파일이름.txt] 명령을 입력합니다.
  2. 파일의 내용을 입력합니다.
  3. crtl + D를 눌러 입력을 멈춥니다.

위의 과정에서 알 수 있듯, 지금까지 파일이 내용을 보기 위해 사용했던 cat 명령이 파일 쓰기에도 사용됐다는 것을 알 수 있습니다. >문자의 의미는 방향전환redirection 입니다.
방향전환을 한다는 의미를 살펴봅시다. 원래 cat명령은 모니터에 명령수행 결과를 출력합니다. 하지만 방향전환을 함으로서, 모니터가 아닌 [파일이름.txt]에 입력결과를 보냅니다. 즉, 출력의 방향을 전환한 것입니다.

자세히 보기

[FTZ] training7

이번에는 리눅스에서 파일들을 압축, 해제하는 방법을 포스팅합니다.

tar 명령어 사용법

tar 명령어는 파일들을 압축하지 않고, 합치는 명령어입니다. 파일을 압축하지 않기 때문에, 합친 파일을 해제할 때, 속도가 빨라서 백업용 프로그램으로 많이 쓰입니다.

  • 파일 합치기: tar -cvf [합칠파일] [합칠파일들]
  • 해제하기: tar -xvf [해제할 파일]
  • 옵션
    • c: create, 새로운 파일 만들기
    • x: extract, 해제하기
    • v: view, 압축하거나 푸는 과정을 출력하기
    • f: 파일로 백업하기

그런데 tar -cvf 명령으로 파일들을 압축하고 결과를 살펴보면 용량이 더 불어난 것을 확인할 수 있습니다. 따라서 일반적으로 gzip이라는 명령과 tar명령을 같이 사용해서 실제 압축을 진행합니다.

자세히 보기

[FTZ] training6

지난 포스팅에서도 언급했듯 이번 포스팅에서는 /etc/passwd 파일을 분석하겠습니다.

/etc/passwd

passwd 파일의 역할은 training4에서 간단하게 살펴봤습니다. 서버를 사용하는 사용자들의 정보를 간단히 기록해두는 파일이라고 했었죠. 이제 passwd파일을 분석하기 위해 프롬프트에 cat /etc/passwd를 입력합니다.

자세히 보기

[FTZ] training5

training5에서는 해킹에서 가장 중요한 것을 언급하며 시작합니다. 해킹에서 가장 중요한 것은 ‘정보’라고 하는군요. 이번 포스팅에서는 해킹을 시도하려는 서버 정보를 수집하는 방법을 작성하겠습니다.

whoami

자신의 정보를 수집하는 명령어입니다. 프롬프트에 whoami명령어를 입력하면 trainer5라며 자신의 접속 ID가 출력됩니다.

1
2
[trainer5@ftz trainer5]$ whoami
trainer5
자세히 보기

[FTZ] training4

이번 training에서는 최상위 디렉토리에 존재하는 하위 디렉토리들을 공부하고, 리눅스에서 중요한 역할을 하는 파일들을 살펴보겠습니다.

루트 디렉토리

루트 디렉토리로 이동 후, ls -l명령을 입력하면 다음과 같이 출력됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[trainer4@ftz /]$ ls -al
total 68
drwxr-xr-x 19 root root 1024 10월 3 11:47 .
drwxr-xr-x 19 root root 1024 10월 3 11:47 ..
drwxr-xr-x 2 root root 2048 10월 1 22:01 bin
drwxr-xr-x 2 root root 1024 10월 2 11:27 boot
drwxr-xr-x 5 root root 34816 10월 2 11:28 dev
drwxr-xr-x 23 root root 2048 10월 5 14:43 etc
drwxr-xr-x 24 root root 1024 10월 2 02:56 home
drwxr-xr-x 4 root root 3072 10월 1 21:59 lib
drwxr-xr-x 6 root root 1024 10월 2 02:52 mnt
dr-xr-xr-x 55 root root 0 10월 2 11:27 proc
drwxr-x--- 5 root root 1024 10월 4 12:03 root
drwxr-xr-x 3 root root 2048 10월 2 02:52 sbin
drwxrwxrwt 5 root root 1024 10월 5 15:57 tmp
drwxr-xr-x 19 root root 1024 10월 1 21:56 usr
drwxr-xr-x 14 root root 1024 10월 1 22:02 var

이제 이 디렉토리들을 하나씩 설명하겠습니다.

자세히 보기