본문 바로가기
모의해킹 침해대응 과정/본 과정

쉘 프로그래밍(bash)_3 / day31

by 알거음슴 2021. 5. 10.

1. 파일 포맷 변경

파일 내부의 구분자를 공백에서 , 으로 변경하자. 변경 후 smaba를 통해 윈도우에서 .csv 형식으로 열어서 확인하자.

#!/bin/bash

TXT=/share/output.txt
CSV=/share/output.csv

cat $InputFile | while read ID NAME EMAIL PHONE ADDR
do
        echo "$ID,$NAME,$EMAIL,$PHONE,$ADDR" >> $CSV
done

 

 

2. 서버 취약점 점검

 1) 서버 시스템의 정보 확인

끝나고 해요

 

2) root 이외의 UID 0번으로 부여된 사용자의 유무 파악.

UID=0 인 사용자가 있을경우 해당 사용자는 root 의 권한을 갖게된다. 해당 사용자들은 서버내 취약성을 띄고 있기에 제어할 수 있는 프로그램을 개발할 수 있어야 한다.

#!/bin/bash

. /root/bin/functions2.sh   # WARN, OK 의 색상표현이 담긴 파일

#PASSWD=/etc/passwd  # 실제 /etc/passwd 파일로 진행하지 않는다.
PASSWD=/root/bin/passwd
TMP1=/tmp/tmp1

cat << EOF
=======================================================
[U-1] root 이외의 UID가 '0' 금지
=======================================================
1. 판단 근거
[ 양호 ] root 이외의 UID가 '0' 없는 경우
[ 취약 ] root 이외의 UID가 '0' 존재하는 경우
=======================================================
EOF

echo "2. Inspection Results"
awk -F: '$3 == "0" {print $1 "\t : UID = " $3}' $PASSWD >$TMP1
LINECOUNT=$(wc -l < $TMP1)

if [ $LINECOUNT -ge 2 ] ; then
    WARN "root 이외의 UID가 '0'인 사용자가 존재하지 않습니다."
else
    OK "root 이외의 UID가 '0'인 사용자가 존재합니다."
fi
echo "======================================================="
echo "3. Reference content "
cat $TMP1
echo "======================================================="

 

 3) root 계정 원격 접속 제한.

/etc/securetty 파일이 존재하며, pts 라인이 없는 경우 정상으로 출력한다. 텔넷서비스의 동작유무도 확인할수 있도록 해보자.

#!/bin/bash

. /root/bin/functions2.sh   # INFO, WARN, OK 의 색상표현이 담긴 파일

#SECURETTY=/etc/securetty   # 원본 파일은 수정하지 않는다.
SECURETTY=/root/bin/securetty
TMP1=/tmp/tmp1

cat << EOF
=======================================================
[U-2] root 계정 원격 접속 제한
=======================================================
1. 판단 근거
[ 양호 ] root 계정이 원격에서 접속할 수 없습니다.
[ 취약 ] root 계정이 원격에서 접속할 수 있습니다.
=======================================================
EOF
echo "2. 점검 결과 "
# (1) telnet service check
TELNET=$(systemctl is-active telnet.socket)
if [ $TELNET = active ] ; then
    INFO "telnet 서비스가 on 되어 있습니다."
# (2) /etc/securetty exist check
    if [ -f $SECURETTY ] ; then
        OK "$SECURETTY 파일이 존재합니다. "
# (3) /etc/securetty pts check
        if grep 'pts/' $SECURETTY > TMP1 ; then
            WARN "root 계정이 원격에서 접속할 수 있습니다."
        else
            OK "root 계정이 원격에서 접속할 수 없습니다."
        fi
    else
        INFO "$SECURETTY 파일이 존재하지 않아서 root 사용자 접근 가능합니다. "
    fi
else
    OK "telnet 서비스가 off 되어 있습니다."
fi
echo "======================================================="
echo "3. 참고 내용 "
echo "============/etc/securetty 파일의 출력내용.==============="
cat $TMP1
echo "======================================================="