Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- binding
- TEST
- appbar
- Coroutines
- Navigation
- intent
- scroll
- 계측
- Compose
- activity
- viewmodel
- 앱
- Kotlin
- Button
- 앱바
- DART
- 안드로이드
- android
- textfield
- Dialog
- Flutter
- data
- livedata
- CustomScrollView
- drift
- LifeCycle
- ScrollView
- textview
- tabbar
- 테스트
Archives
- Today
- Total
Study Record
[리버싱 기초개념] 레이스 컨디션/signal 본문
728x90
1. 레이스 컨디션
☞ 레이스 컨디션(Race Condition)
다수의 프로세스가 서로 동일한 자원을 할당받기 위해 경쟁하는 상태이다.
☞ 레이스 컨디션(Race Condition)의 전제조건
- 다른 계정의 권한에 접근해야 하므로 SetUID가 걸려 있어야 한다.
- 임시 파일을 생성해야 한다.
- 공격자가 임시로 생성되는 파일명을 정확하게 알아야 한다.
☞ 레이스 컨디션 원리
victim.c (SetUID, root) | attack.c |
임시파일 생성 (/tmp/tmp1) 임시파일 사용 임시파일 삭제(/tmp/tmp1) |
while(true){ if( /tmp/tmp1 파일이 존재?){ # /tmp/tmp1 에 대한 공격 동작 break; } } |
victim.c 프로그램이 실행될 때 attack.c 가 동시에 실행하면서 같은 자원(임시파일(/tmp/tmp1))을 경쟁하다보면 의도치 않은 동작을 할 수 있다.
☞ 레이스 컨디션 공격 방어 방법
되도록이면 임시파일을 생성하지 않고 생성하게 되더라도 이름을 랜덤하게 준다.
2. signal
☞ 시그널(signal)?
하나의 프로세스가 다른프로세에게 보내는 비동기적 알림 이벤트 메세지이다.
kill 명령어를 통해 시그널을 보낼 수 있다.
# man 7 signal
☞ kill CMD
사용 형식 : kill -[signal] <프로세스>
# kill -l : 시그널 번호/이름 목록 확인
번호 | 시그널 이름 | 설명 |
1 | SIGHUP | 터미널에서 접속이 끊겼을 떄 보내지는 시그널 (종료) |
2 | SIGINT | 키보드로부터 오는 인터럽트 시그널 (종료) - CTRL + C |
3 | SIGOUT | 키보드로부터 오는 실행 중지 시그널 - CTRL + \ 프로세스를 종료시킨 뒤 코어를 덤프한다. |
9 | SIGKLL | 무조건 종료, 프로세스 강제 종료 |
15 | SIGTERM | 정상 종료 - default |
18 | SIGONT | STOP 시그널에 의해 정지된 프로세스 다시 실행 |
19 | SIGTOP | 터미널에서 입력된 정지 시그널 SIGONT(18) 으로 다시 실행 가능 |
20 | SIGSTP | 실행 정지 후 다시 실행을 계속하기 위해 대기시킨다. - CTRL + z SIGONT(18) 으로 다시 실행 가능 |
# kill -9 1134
# kill -15 1234
☞ 시그널 핸들러
프로세스가 특정 시그널을 포착했을 때 수행해야 할 별도의 함수
시그널 종류 : /usr/include/asm/signal.h
→ signal() 함수
- https://laustudy.tistory.com/46
- https://www.ibm.com/docs/ko/i/7.3?topic=functions-signal-handle-interrupt-signals
#include <signal.h>
sighandler_t signal(int signum, sighandler_t handler);
/*
인터럽트 신호를 처리할 수 있는 함수이다.
리턴값 : 성공시 handler 함수 주소, 실패시 EINVAL
signum : 시그널 번호/이름
handler : SIG_DFL 또는 SIG_IGN 중 하나여야 하며, <signal.h> 포함 파일이나 함수 주소에 정의된다.
*/
signal(SIGINT, SIG_DFL); # SIG_DFL : 시그널 실행
signal(SIGQUIT, SIG_IGN); # SIG_IGN : 시그널 무시
signal(SIGINT, handler); # handler 라는 별도의 정의된 함수 실행
728x90
'리버싱 > 기초 개념' 카테고리의 다른 글
[리버싱 기초개념] 공유메모리 (0) | 2021.11.17 |
---|---|
[리버싱 기초개념] 포맷 스트링 공격 구문 (0) | 2021.11.17 |
[리버싱 기초개념] 버퍼 오버플로우 (0) | 2021.11.16 |
[리버싱 기초개념] 진법 전환/John the ripper(암호 크랙) (0) | 2021.11.16 |
[리버싱 기초 개념] (UID/EUID , xinetd) (0) | 2021.11.12 |