'시스템'에 해당되는 글 34건
- 2009.11.12 Malware 1
- 2009.11.12 리눅스 커널
- 2009.11.11 구조체와 포인터
- 2009.11.05 portable site
- 2009.11.03 Linux Kernel Map
- 2009.10.20 batch 변수 선언
- 2009.10.13 PC 보안 자가진단 지원 도구
- 2009.10.07 Bindshell+Trinoo
- 2009.10.05 ftpusers 파일이 있는가? 있다면 권한 설정은 적절한가?
- 2009.10.05 METASPLOIT UNLEASHED - MASTERING THE FRAMEWORK
제목 : Linux Kernel Internal & Embedded Linux
저자의 말
난 아마추어다. 난 아마추어이기에 기꺼이 이런 글을 쓸 수 있다. Linux는 그런 아마추어가 만든 것이며,
이젠 서서히 상업 시장으로의 발길을 재촉하고 있다. 어려운 용어들이 난무하고 디지털이 어쩌구 한다.
Linux는 어쩌면 이러한 어려운 용어들 속에서 쉽게 개발자와 친근해 질 수 있는 친구로서, 네트워크화
된 사회에서 나올 수 밖에 없는 필연적인 결과 물( 혹은 중간 결과 물 ) 일지도 모른다.
예전에 군대를 갔다가 복학했을 때가 생각난다. 숙제를 FTP를 이용해서 제출하라는 말에, 멍한 눈으로
교수를 응시했다가, 옆에 앉은 후배를 다그쳐서 그게 뭔지를 알게 되었을 때이다. 결국 난 숙제를 그냥
디스켓에 담아서 냈다. 인터넷은 그렇게 내게 별로 관대하지 못했다. 복학생이 뭘 알기에... 조금 더
후에 친구 녀석이 Linux라는 것을 디스켓으로 70여장에 가깝게 주었을 때, 이게 어떤 것인가를
고민하다가 X-Window까지 올리는데 무려 3개월이 걸렸다. 친구 녀석은 내게서 3개월간의 밤을 빼앗아
갔던 것이다. 요즘은 1시간도 안될 꺼리를... 그 좋은 CD-ROM을 두고서 말이다.
결국 난 지금에서야 인터넷의 도움으로 쇼핑도 하고, 책과 자료들도 찾고 ADSL로 집에서 상영되지
않은 영화도 열심히 다운 받아서 본다. 바로 이 편리함 속에서 그 방대한 양의 지식들이 불과 몇 초
사이에 지구를 몇 바퀴나 돌고 있는 것이다. 아직 인터넷의 “인”자가 참을 “인”자로 생각되는 곳에서도
많은 사람들이 Linux의 코드를 열심히 분석하고 있고, 더 나은 것을 만들려고 노력하고 있다. 난 그
중의 한 사람이며 그들 개발자들보다 더 많이 알지도 못한다. 다만 그들의 지적 노력의 산물을 내
나름대로 분석하고 내 나름대로 정의해서 보고 있을 뿐이다.
이 글을 읽는 사람이라면, 적어도 책의 첫 몇 페이지는 넘긴 사람일 것이다. 그런 사람들을 위해서 책의
내용이 어떤 것을 말하는 지를 알리고자 다음에 몇자 적어본다. 참고하기 바라지만 절대적인 기준은 못
된다.
이런 사람이라면 이 글을 읽어볼 만 하다고 생각한다.
- 밤이 깊어도 잠이 오지 않아 이리저리 뒤척이는 사람.
- 인터넷에 널린 문서들과 서점의 외국어 책 가판 대에 진열된 많은 Linux관련 도서를 다 읽기는
싫고, 영어실력도 못 따라가는 사람. 그렇다고, 영어 공부도 할 수 없는 사람. 하지만, 기본적인
영어는 아는 사람이며, 적어도 영한 사전을 책상 위에 하나쯤은 두고 사는 사람. - 적어도 Linux를 가지고 밥을 먹고자 하는 사람.(아마 나 자신일지도 모른다. 하지만 배가 고픈
것도 사실이다. ^^;) - 인터넷 서점에서 Linux를 키워드로 책을 찾았지만, next라는 표시와 함께 한도 끝도 없이 많은
책들로 어떤 책을 사야 할지를 고민하는 사람. 그리고, 그 많은 책들을 다 볼 시간도 없는
사람.
하지만., 정작 책장을 넘기면 이런 사람들이 읽어야 할 것이다.
- Linux는 설치하고 ls와 cd를 칠 줄은 알지만, 더 많은 것을 알기를 원하는 사람.
- 실제적인 개발에 조금이라도 도움을 원하는 사람.(정말 조금 밖에는 도움이 안될지 모르지만)
- 디바이스 드라이버 입문 책은 다 보았지만, 정작 구현하려고 관련된 소스 코드를 찾았지만
뭐가 뭔지 구분이 안 되는 사람.
하지만, 이런 사람에게는 다른 책을 권하고 싶다.
- Linux를 이용하지만, 커널이나 기타 구조에 대해서는 관심이 없는 사람.
- Linux 명령어를 배우려고 공부하는 사람.
- C 언어는 알지만 Hello world이외의 프로그램을 해본 경험이 없거나, Assembly어는 노가다를
좋아하는 사람만 한다고 생각하는 사람. - 운영체제를 자세히 알거나, 운영체제의 이론을 처음으로 배우려고 하는 사람.
- 기타등등의 앞에서 나열한 사람들에 속하지 않는 사람들.
어쨌든 어떤 사람들에게는 유용한 자료가 될 것이지만, 다른 사람들에게는 치명적인 자료가 될지도
모른다. 헛된 시간을 낭비하지 않기를 바란다. 이제 이 책은 내 책상 위의 컴퓨터 속에 한 폴더를
벗어나 세상으로 나가려고 한다. 내 목소리를 흉내내지만 내가 아니며, 나의 글 쓰는 스타일을 틀어쥐고
있지만 나의 밥 먹는 스타일은 아니다. 잘못된 지식을 전파하는 것은 나쁜 일이기에 섣불리 꺼내
놓기가 두려운 것도 사실이다. 그럼에도 불구하고 이 글을 출판하는 것은... 역시 나는 아마추어이기
때문이다. 용서 하기 바란다. 더 좋은 글을 쓸 수 있도록 노력하길 빌어주었으면 한다.
2002년 월드컵의 해에 드립니다.
권 수 호.
// 예전에 인력착취를 통해서 습득한 정보 (2008년 여름쯤)
-bindshell, trinoo daemon
execve() - execve (const char *filename, char *const argv [], char *const envp[]);
filename이 가리키는 파일을 실행한다.
uname() - 시스템 정보 를 얻어온다(커널에 대한 이름과 버젼정보등을 얻어온다)
brk() - 데이터 세그먼트 사이즈 변경
old_mmap() - mmap(void * addr, size_t len, int prot, int flags, int fd, off_t offset);
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40016000
메모리 블럭을 할당하고 0x40016000으로 반환
open() - 파일을 열거나 생성 할때 사용한다 에러가 발생시 -1을 반환한다
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
ENOENT : 경로명의 디렉토리가 없거나, 심볼릭 링크가 깨져있을때.
stat() - 파일의 상태를 알아올수 있다 성공할경우 0을 실패했을경우에는 -1을 반환
close() - close 는 열린 파일 지정번호를 닫는다.
read() - open으로 열린 파일에서 원하는 데이터를 읽어 들인다.
mmap() - fd로 지정된 파일(혹은 다른 객체)에서 offset을 시작으로 length바이트 만큼을 start주소로 대응시키도록 한다
socket()- socket(int domain, int type, int protocol); - 통신의 종점를 생성하고 성공시 통신종점으로 사용될 파일지시자를 반환
bind() - bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);sockfd 는 socket함수를 통해서 만들어진 소켓지정번호이다.
bind 는 이 sockfd 에 my_addr 로 대변되는 특성을 부여한다.
my_addr 에는 sockfd 가 통신을 하기 위해서 필요한 정보인 "port", "인터넷주소", "소켓 흐름종류" 등을 포함하고 있다.
exit_group() - exit_group() 이 시스템 호출은 전체 프로세스와 쓰레드를 종료한다.
sendto() - 지정된 주소로 데이터를 전송하는 함수이다.
clone() - 새로운 프로세스를 생성한다. fork 와 달리 자식프로세스가 메모리, 테이블, 시그널핸들러 테이블과 같이 부모 프로세스와
실행 문맥 부분들을 공유한다.
setpgid() - setpgid(pid_t pid, pid_t pgid); pid로 설정된 프로세스의 프로세스 그룹 ID를 pgid로 설정한다.
소스분석 bindshell
http://ttongfly.net/zbxe/?mid=hacktips&page=4&document_srl=42702
man page
http://man.cx/
http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2#E
===============================================================================
있다면 2로 이동, 없다면 3으로 이동
if [-f /etc/ftpd/ftpusers]
then
if [ `ls -alL /etc/ftpd/ftpusers | awk '{print $1}' | grep '........-.' | wc -l` -eq 0 ]
then
echo "결과 : 취약" >> ftpusers.txt
else
echo "결과 : 양호" >> ftpusers.txt
fi
else
echo "no-file" >> ftpusers.txt
fi
if [ `cat /etc/profile | grep -i "umask" | awk -F "0" '$2 >= "22"' | wc -l` -eq 1 ]
then
echo "양호" >> result.txt
else
echo "취약" >> result.txt
fi