개요
프로그램에서 함수의 호출은 어떤 과정으로 일어날까? 메모리의 스택 영역에는 함수가 호출될 때, 호출된 함수와 관계된 지역변수와 매개변수가 저장된다. 만약 프로그램이 함수를 여러 번 호출하거나 함수 내부에서 또 다른 함수를 호출한다면, 여러 함수들의 정보가 스택 영역에 저장될 것이다.
간단한 C 언어 소스코드와 컴파일된 main 함수 어셈블리 코드를 살펴보자.
1 | void function(int x){ |
해당 글은 2017년에 발표된 문서를 기준으로 작성되었습니다. 참고하여 읽어주시길 바랍니다.
Open Web Application Security Project(OWASP)는 소프트웨어 보안 향상을 위해 여러가지 일을 하는 오픈소스 프로젝트이다. OWASP에서는 세계적으로 많고 다양한 구성원들이 속해있고, 여러 회사 혹은 개발자들의 웹 보안 기술을 지원한다. 주로 웹의 보안 취약점, 악성파일 및 스크립트 등을 연구하며, 2004년 이래로 3~4년에 한 번씩 10대 웹 어플리케이션 취약점(OWASP TOP 10)을 발표했다.
OWASP Top 10은 웹 어플리케이션에서 발생할 수 있는 심각한 보안 위험들을 몇 가지 평가 기준에 맞춰 선별한다. 발표 내용에서는 공격가능성, 취약점 확산정도, 취약점 탐지 정도, 기술적 영향을 구분해서 각각의 위험도를 평가했다. 시간이 지날 때마다 쏟아지는 신기술과 그에 따라 발생하는 수많은 보안 위협 대비책이 될 수 있도록 방향성을 제시한다.
드디어 마지막 트레이닝입니다. 이번에는 로컬 해킹시 핵심인 SetUID에 대해 알아봅니다.
해킹에는 Remote 해킹과 Local 해킹 두 가지가 있습니다. Remote 해킹은 자신이 해킹하고자 하는 서버에 아이디를 가지고 있지 않을 때, 아이디를 얻으려 시도하는 것입니다. 다른 하나는 Local 해킹입니다. 이것은 해킹하고자 하는 서버에 일반 계정을 가지고 있을 때, 관리자 권한(root)을 얻으려 시도하는 것입니다.
Remote 해킹 방법엔 무작위로 아이디와 비밀번호를 입력해 접속하는 방법부터 데몬 취약점을 공략하는 방법, 게시판과 방명록을 이용해 접속하는 방법 등 수많은 방법이 있다고 합니다.
하지만 루트 권한을 얻는 과정이 가장 중요하기 때문에 Local 해킹이 중요합니다.
드디어 이전부터 계속해서 얘기했던 리눅스의 권한에 대해 작성합니다. 권한에 대한 개념은 해킹에서 가장 핵심적인 부분이고 FTZ 워게임에서도 이 개념을 알아야만 문제를 해결할 수 있습니다.
리눅스는 윈도우와 달리 한 서버에 여러 사용자가 접속하여 사용합니다. 사용자가 어떤 서버에 아이디를 갖고 있다면, 그 계정이 할당된 공간에 홈페이지를 만들거나, 파일을 업로드, 생성하는 등 여러 작업들을 할 수 있습니다. 이 때, 다른 사용자가 이 사용자의 파일에 접근하지 못 하도록 막을 수 있는 개념이 권한(Permission)입니다.
만약 권한이 없는 파일에 접근하려한다면 Permission Denied라는 에러메시지가 출력됩니다. 이처럼 리눅스는 각 사용자마다 특별한 권한을 부여하여, 그 권한의 범위를 넘어서지 않는 파일들만 제어할 수 있도록 설정되어 있습니다.
이번에는 새로운 파일을 생성하고, 소스코드를 만들어 컴파일하고 실행하는 방법을 설명합니다.
파일의 종류는 두 가지가 있습니다. 먼저, 일반 텍스트 파일입니다. 이것은 윈도우에서 우리가 메모장으로 생성한 .txt
의 파일이나 training을 하며 cat
명령으로 내용을 출력했던 파일들입니다. 다른 하나는 프로그램 소스파일입니다. 소스파일 역시 텍스트 파일이지만 보통 이 파일은 컴파일과정을 거쳐 실행 가능하도록 만든 후 사용합니다.
cat > [파일이름.txt]
명령을 입력합니다.위의 과정에서 알 수 있듯, 지금까지 파일이 내용을 보기 위해 사용했던 cat
명령이 파일 쓰기에도 사용됐다는 것을 알 수 있습니다. >
문자의 의미는 방향전환redirection 입니다.
방향전환을 한다는 의미를 살펴봅시다. 원래 cat
명령은 모니터에 명령수행 결과를 출력합니다. 하지만 방향전환을 함으로서, 모니터가 아닌 [파일이름.txt]
에 입력결과를 보냅니다. 즉, 출력의 방향을 전환한 것입니다.
이번에는 리눅스에서 파일들을 압축, 해제하는 방법을 포스팅합니다.
tar
명령어는 파일들을 압축하지 않고, 합치는 명령어입니다. 파일을 압축하지 않기 때문에, 합친 파일을 해제할 때, 속도가 빨라서 백업용 프로그램으로 많이 쓰입니다.
tar -cvf [합칠파일] [합칠파일들]
tar -xvf [해제할 파일]
c
: create, 새로운 파일 만들기x
: extract, 해제하기v
: view, 압축하거나 푸는 과정을 출력하기f
: 파일로 백업하기그런데 tar -cvf
명령으로 파일들을 압축하고 결과를 살펴보면 용량이 더 불어난 것을 확인할 수 있습니다. 따라서 일반적으로 gzip
이라는 명령과 tar
명령을 같이 사용해서 실제 압축을 진행합니다.
이번 training에서는 최상위 디렉토리에 존재하는 하위 디렉토리들을 공부하고, 리눅스에서 중요한 역할을 하는 파일들을 살펴보겠습니다.
루트 디렉토리로 이동 후, ls -l
명령을 입력하면 다음과 같이 출력됩니다.
1 | [trainer4@ftz /]$ ls -al |
이제 이 디렉토리들을 하나씩 설명하겠습니다.