본문 바로가기
정보보안

정보보안2 1차시

by 뭔가해보겠습니다 2024. 5. 4.

복습)
require : 성공해야만 전체 인증 성공.
실패시 다음 인증을 수행하지만, 인증자체는 실패
sufficient : 모듈이 성공하면 인증은 성공. 실패는 인증에 영향X
requisite : 실패시 즉시 실패.

 

lsof : 열린 파일에 대한 정보 출력

 

+ 쉘 스크립트에 대한 강의를 할 것인지 (시간이 오래 걸림) 고민중이라 하심

 

파이프 PIPE
프로세스간 통신 방법인 IPC 방법 중 하나
기호 이름은 언네임드 파이프 | 

0 표준입력, 1 표준출력, 2 표준에러를 의미한다.

 

man 명령어

man 명령어를 통해 설명을 참고할 때, man 페이지는 여러 챕터로 나누어져 있는데
exit나 wait같은 명령어는 여러 챕터에 내용이 있다
때문에 명령어로서의 설명을 보려면 man 3 exit, man 3 wait 이렇게 페이지를 명시해야 한다

 

exec 명령어
=> exec 현재쉘에서 명령어 수행. 쉘의 마지막 명령어가 수행되면 종료exit되기 때문에 수행후 바로 꺼진다.

그래서 fork()를 통해 복제한 후 복제된 쉘에서 수행해야 한다

( 부모 프로세스는 복제된 자식 프로세스의 실행종료를 wait 기다리고 있다 )

 

exit(0)
정상종료, 0외의 값은 비정상종료

( 예를 들어 int main() { return 0; } 같은 것 )

 

모든 명령어에는 리턴값이 있는데

grep이 (패턴)검색에 성공하면 0을 리턴하고, 찾지 못하면 1을 리턴한다.

 

공격코드 업데이트 사이트 참고 : https://www.exploit-db.com/

 

pwd | grep -q textStr
return_value=$?
if [ $return_value -eq 1 ]; then
	echo "들어있음"
else 
	echo "들어있지 않음"
fi
// $?에는 방금 전 실행한 명령어의 리턴값을 담아준다.
// grep 경우 내용을 찾으면 0, 찾지 못하면 1을 리턴한다.

=> pwd 폴더명에 textStr이 포함되어 있는지 체크

 

 

절대경로와 상대경로

절대경로 : 사용시 경로만 수정하면 된다. 단점은 경로가 너무 김.

상대경로 : 기본경로는 /lib64/security로 설정됨. 파일 디버깅시 직접 컴파일하고 복사하거나 복구해야하는 번거로움이 있다.

 

실습 ) pam_succedif.so

/rpmbuild/SOURCES/Linux-PAM-1.1.8/modules/pam_succeed_if

참고 : https://linuxmaster.net/pam/linux-pam/sag-pam_succeed_if.html

계정 속성 검사

계정의 속성이나, 다른 PAM 항목 값에 따라 인증의 성공, 실패 여부를 결정할 수 있다

/etc/pam.d/su 파일에 등록된 모듈 설정

=> 기존 설정 : 인증자 uid가 0(root)이면 성공. 시스템로그에 기록X

 

+  ~ pam_succeed_if.so uid = 1000

=> uid 1000번으로 바꾸려고 할 때를 의미

~ pam_succeed_if.so uid = 1000 use_uid

=> uid 1000번 사용자가 su를 사용할 때를 의미

 

flag에 uid를 linuxadmin으로 변경했을때

=> linuxadmin에서 su 실행시 암호를 묻지 않는다

똑같이 일반유저인 user1이 su 시도시 암호를 묻는다

 

flag에 use_uid를 삭제했을 때

=> uid 1000번 사용자로 변경하고자 했을 때 암호를 묻지 않게 되었음

 

 

pam_succeed_if.c 여러가지 속성값을 검사하는 로직들이 있다
모든 모듈 타입을 제공한다. auth, account, password, session

 

PAM 모듈 분석 방법

1. man 명령어로 모듈 설명서 참고 

2. 분석하고자 하는 모듈 디렉터리로 이동하여 소스코드 확인/디버깅 ( 함수에 커서를 놓고 Shift + k 하면 man 에 있을시 설명 확인 가능 )

3. /etc/pam.d/명령어 파일을 수정하여 디버깅 결과를 확인하면서 분석

 

rpm -Va (전체 패키지)

=> 체크썸checksum 검사 명령어

rpm -Vp (한 패키지만 검사)

 

 

 

쉘 스크립트의 if문 형태
1) if 조건
then 실행문
else 실행문
fi


2) if test 조건(참/거짓)
then 실행문
else 실행문
fi

3) if [[ 조건 ]]  혹은  if [ 조건 ]
then 실행문
else 실행문
fi
ex) 변수활용하여 문자열 패턴 매칭 ( 문자열 비교식을 사용하려면 대괄호 두 개로 감싸주어야 함 )
if [[ $textStr == *text* ]]                                                   ← 와일드카드* 사용
if [[ $textStr == *text* && $textStr2 = "$match" ]]

if  [[ $textStr =~ text ]] 또는 if  [[ "$textStr" =~ text ]]          ← 정규표현식 연산자 =~ 사용
ex) 산술연산 (( ))
if [ $textNum -gt 7 ] 또는 [ $((textNum > 7)) -ne 0 ]

( 참고 블로그 : https://shlee1990.tistory.com/607 , https://young-cow.tistory.com/81 )

 

+ test와 [ ] 대괄호는 중복 사용될 수 없다

 

+ 비교식
-z 값이 공백이면 참
-n 값이 공백이 아니면 참
-eq 값1=값2 이면 참
-ne 값1!=값2 이면 참
-ge 값1이 값2보다 크거나 같으면 참
-gt 값1이 값2보다 크면 참
-le 값1이 값2보다 작거나 같으면 참
-lt 값1이 값2보다 작으면 참
-a = 둘다 참이면 참
-o = 둘 중 하나라도 참이면 참

 

파일확인
-f 일반파일
-d 디렉토리
-L 심볼릭링크
-S 소켓파일
-r 권한이 r이면 참
-w 권한이 w이면 참
-x 권한이 x면 참
-s 파일크기가 0이 아니면 참
-nt 파일1이 파일2보다 최신일때 참
-ot 파일1이 파일2보다 오래되면 참
-ef 파일1과 파일2가 같은 파일이면 참

 

( awk 라는 명령어도 있다고 해서 참고용으로 달아줌 : https://gsk121.tistory.com/438 )

 

 

 

이번주의 과제

1. C언어의 문법 중 배열, 포인터, 구조체에 대해서 공부해오기

- 1차원 배열, 2차원 배열

- 1차원 포인터, 2차원 포인터

- 구조체 포인터

 

2. /etc/passwd, /etc/shadow의 구조체 알아보기

- 해당 구조체들의 정보를 출력하는 함수를 이용해 출력 프로그램 작성 (쉘이든, c언어든)

 

 

'정보보안' 카테고리의 다른 글

과제)  (0) 2024.05.09
정보보안2 2차시  (0) 2024.05.05
정보보안1 8차시  (0) 2024.04.28
정보보안1 7차시  (0) 2024.04.27
정보보안1 6차  (0) 2024.04.21