외로운 Nova의 작업실

정보보안기사 실기 - 3(어플리케이션) 본문

Certification/정보보안기사

정보보안기사 실기 - 3(어플리케이션)

Nova_ 2023. 4. 20. 12:21

- DNS

<windows ip 질의 동작 순서>

1.  로컬 dns 캐시

2. hosts.ics(인터넷 연결 공유 기능 사용시 클라이언트의 IP를 강제로 지정하는 기능을 가진 설정파일)

3. hosts

4. 네임서버

 

<로컬 dns 캐시 정보 조회하기>

ipconfig /displaydns

 

<dig .명령어>

dig는 리눅스와 유닉스 계열에서 nslookup을 대체하기위해 만들어진 명령어 입니다. 사용방법은 아래와 같습니다.

dig @192.168.10.10 www.google.com

192.168.10.10 네임서버에게 www.google.com의 ip를 물어보고 있습니다. 

 

<DNS Cache Poisoning 공격>

DNS는 반복적 질의를 요청하여 부하가 발생하는 것을 막기 위해 캐시를 사용하고 TTL 동안 이를 유지합니다. 단, 취약한 점이 있는데, 반복적 질의를 요청한후 응답이 도착하면 인증없이 그 정보룰 캐시에 저장한다는 점입니다. 즉, 정상적인 응답이 아닌 공격자의 응답을 먼저 도착하게하면 악의적인 정보가 캐시에 저장됩니다. 아래는 공격 방식입니다.

  1. 공격자는 대상 DNS 서버에게 조작할 도메인 질의를 다수보냅니다. 다수 보내는 이유는 반복적 질의시 사용하는 Transaction ID와 출발지 Port를 모르기때문입니다.
  2. 계속 보내다보면 DNS서버는 조작할 도메인에대해 질의를 하게되고 공격자의 응답을 먼저 받아 캐시에 저장하게됩니다.

대응책으로는 DNSSEC(DNS security extensions)가 있습니다. 이는  IETF에 의해 만들어졌으며 기존의 DNS에 공개키 암호화 방식의 보안 기능을 추가 부여하여 DNS의 보안성을 대폭 강화하는 역할을 합니다.

 

<마스터/슬레이브 DNS>

마스터에 있는 원본 즉 존 데이터를 슬레이브가 동기화하는 작업을 존전송이라합니다. 존 파일에 대해서 알아봅시다.

named.conf는 존 설정파일입니다. tyoe master은 kiwi99.com이 마스터 네임서버이며 존 파일은 kiwi99.com.db파일에 있다는 걸 의미합니다. 56.168.192.in-addr.arpa는 리버스 도메인으로 reverse lookup을 위한 특수한 도메인입니다. 이러한 파일을 리버스 존 파일이라 합니다.

<재귀적 질의에대한 제한>

재귀적 질의에대한 제한은 named.conf 파일에서 이루어지며 적절한 접근제어 및 재귀적 질의를 제한해야합니다.

 

<존 전송에대한 제한>

존 전송은 대용량이므로 리소스를 낭비할 수 있기때문에 제한해야합니다.

 

 

<HTTP 쿠키 관련 보안 속성>

응답 헤더에 path=/; HttpOnly를 붙이면 http만이 쿠키를 설정할 수 있게됩니다. 브라우저가 쿠키에 접근하는 것을 방지합니다.

더 나아가서 secure; HttpOnly를 붙이면 SSL/TLS 즉, Https통신일 경우에만 쿠키를 전송하고 HTTP 전송일경우에는 전송하지 않는 속성입니다. 

 

<주요 요청 메소드>

  • GET : 자원을 서버에게 요청합니다.
  • POST : 서버에게 데이터를 전달하여 처리결과를 받습니다.
  • HEAD : GET 메소드와 유사하지만 헤더부만 응답해줍니다.
  • OPTIONS : 서버가 지원하는 메소드르 확인합니다.
  • CONNECTIONS : 터널링 목적으로 사용하며 웹서버가 프락시 역할을 수행합니다.
  • PUT : 데이터를 전달하고 서버에게 저장합니다.
  • TRACE : 루프백 테스트 용도로 사용하는 메소드입니다.
  • DELETE : URI를 지우는 메소드입니다.

<주요 응답 코드>

 

<FTP bounce Attack>

FTP PORT 명령은 파일을 받을 IP와 포트를 지정할 수 있는데, 이때 다른 서버의 IP와 PORT를 주면 네트워크 스캔이 가능합니다.

 

<TFTP 공격>

TFTP는 인증과정없이 지정된 디렉터리에 접근할 수 있는 보안상 취약점이 존재합니다.

 

<대응책>

TFTP를 사용하지않는 경우 삭제합니다.

inetd환경에서는 inetd.conf 설정파일에서 tftp서비스를 주석처리합니다. 

xinetd환경에서는 TFTP의 disable 속성을 yes로 변경합니다.

운영해야한다면 secure mode로 운영합니다. 이는 정해진 디렉터리만을 사용하게하여 상위 디렉터리로 접근하지 못하도록 제한하는 방식입니다.

 

<Anonymous FTP 공격>

vsftp.conf 설정파일이 아래와 같을경우

anonymous로 로그인이 가능해집니다.

 

 

<FTP 접근제어 설정>

FTP는 아이디와 비밀번호를 평문 송수신하기때문에 중요계정에대해서는 FTP 접속을 제한해야합니다. 이때 사용하는 파일이 ftpusers 파일입니다.

 

<SNMP 개요>

SNMP란 정기적으로 여러 관리 정보를 자동으로 수집하거나 실시간으로 상태를 모니터링 및 설정할 수 있는 서비스로 SNMP는 프로토콜일뿐이며 이를 활용하여 실제 네트워크 관리 정보를 얻기 위해서는 관련 프로그램이 준비되어야합니다. 관리의 편리성을 주지만 여러 취약점들이 존재하여 dos, 버퍼 오버플로우, 비인가 접속등 여러가지 문제점들이 발생할 수 있습니다. SNMP Manager은 관리자에 설치되며 SNMP Agent는 관리 대상 시스템에 설치됩니다. MRTG는 SNMP 장비 모니터링 장비이며, SNMP는 OSI 7계층의 애플리케이션 프로토콜입니다. UDP 프로토콜을 사용합니다. 특히 관리시스템은 162/udp를 사용하며 에이전트는 161/udp를 사용합니다.

 

<SNMP 데이터 수집 방식>

  • Polling 방식 : 매니저가 에이전트에게 정보를 요청하면 응답해주는 방식입니다.
  • Event Report 방식 : 에이전트가 이벤트 발생시 매니저에게 알리는 방식입니다.

<주요 용어>

  • MIB : 특정한 정보를 모아놓은 집하체를 MIB라합니다. 
  • SMI : MIB를 정의하기위한 일반적인 구조를 의미합니다.

 

<SNMP 버전별 특징>

  • SNMPv1 : 보안기능이 없으며 community string(패스워드)만 일치하면 모든 정보를 얻을 수 있습니다.
  • SNMPv2 : 암호화와 해시 기능을 추가햇으나 인증기능이없습니다. 가장 많이 사용되는 SNMPv2c는 SNMPv2에서 복잡한 보안 기능을 제거한 버전으로 보안상 취약합니다.
  • SNMPv3는 데이터 인증, 암호 기능 및 재사용 방지, 세분화된 접근 통제 등 개선된 보안 서비스를 제공하므로 이전 SNMP 버전에서 제공되지 않았던 안전한 통신망 관리를 위한 기반 기술을 제공합니다.

<NMS>

NMS런 Network management System의 약자로 네트워크상의 자원들을 모니터링 하고 제어하기위한 도구입니다. 모니터링 방식으로는 Polling방식과 Event Reporting 방식이 있습니다.

 

- 웹 어플리케이션 취약점

<무료 SQL injection 취약점 스캐너>

Nikto : GNU 기반 오픈소스로 웹서버 및 SQL injection에대한 취약점 점검, 리눅스 기반

SQLMap : 블라인드 SQL Injection을 자동으로 수행하는 도구로 python에서 개발

Absinthe : GUI기반의 도구로 SQL injection 취약점에 이용합니다. 데이터 베이스의 스키마와 목록을 자동화과정으로 다운로드합니다.

 

- SQL Injection

 

<공격방식에 의한 분류 - Form SQL injection>

Form 기반으로 SQL injection을 실행하는 방법입니다. 페이로드들은 아래와 같습니다.

'or 1=1#
1or '1'=1#
' or 'a'='a'#

<Form SQL injection 해결책>

PHP : php.ini의 magic_quotes_gpc를 on으로 설정합니다. 이러면 특수문자들을 이스케이프처리해줍니다.

mysql : mysql_real_escape_string() 함수를 통해 특수문자 이스케이프처리를 합니다.

Prepared Statement(선처리 질의문) : 질의문의 쿠러부분을 미리 컴파일하여 입력값만을 매개변수로 전달하여 질의문을 실행하는 방식입니다.  성능에도 좋고 sql injection 방어에도 효과적입니다.

 

<공격 방식에 의한 분류 - union SQL Injection>

union select 쿼리를 이용하여 공격하는 기법으로 각각의 select 문의 필드 개수가 같아야하며 필드 타입이 호환가능해야합니다. 페이로드는 아래와 같습니다.

'union select 'admin'#

 

<공격 방식에 의한 분류 - Stored Procedure SQL injection>

ms-sql의 경우 확장 프로시저를 통해 여러가지 일들을 할 수 있습니다. 단, ms-sql에는 xp_regwrite라는 확장 프로시저가 있는데, 이 프로시저는 레지스트리 값을 변경하는 프로시저입니다. 이 프로시저는 sql문에서 사용하고, 사용방법은 아래와 같습니다.

EXEC master..xp_regwrite 
    'HKEY_LOCAL_MACHINE', 
    'SOFTWARE\Microsoft\Windows\CurrentVersion', 
    'TestValue', 
    'REG_DWORD', 
    1234

사용자의 입력값을 제대로 검증하지않고 프로시저를 사용하게된다면 아래와 같은 injection이 발생할 수 있습니다.

이렇게되면 윈도우 도움말 실행시 공격자가 심어놓은 악성코드가 실행됩니다. 따라서 MS-SQL의 경우 아래와 같은 확장 프로시저는 제거하는 것이 안전합니다.

master..xp_cndshell
xp_startmail
xp_senmail
xp_regwirte

 

<공격 유형에 대한 분류 - Error Based SQL Injection>

DB 쿼리에대한 에러값을 기반으로 한단계씩 점진적으로 DB정보를 획득할 수 있는 방법입니다. 클라이언트에서 조작할 수 있는 파라미터에 SQL Query 관련 특수문자를 삽입하여 SQL 에러가 발생한다면 해당 취약점이 있다고 판다할 수 있습니다. 아래는 예시입니다.

요즘에는 많이 없지만 과거에는 많이 발견되었습니다.

 

<공격 유형에대한 분류 - Blind SQL Injection>

DB 쿼리에대한 오류메시지를 반환하지 않으면 공격을 할 수 없는 Error-Based SQL Injection과 달리 오류 메시지가 아닌 쿼리 결과의 참 거짓을 통해 의도하지않은 SQL 문을 실행함으로써 데이터베이스를 비정상적으로 공격하는 기법입니다. 단순하게 오류 메시지를 자세하게 반환한지 않게 설정해 놓았다면 Error-Based SQL Injection은 피할 수 있지만 Blind SQL Injection에는 취약합니다. 쿼리의 참/거짓에대한 반응 형태에 파악이 우선되며 취약점 발견시 자동화 도구를 이용합니다. 아래는 공격 방식입니다.

1. 먼저 참/거짓을 알려주는 부분을 찾습니다.

2. 스키마 DB의 데이터를 한글자씩 뽑아냅니다.

위 사진은 테이블 이름의 첫번째 값이 a가 아니라는 뜻입니다.

 

- 크로스 사이트 스크립트

웹 어플리케이션에서 사용자 입력값에대한 필터링이 제대로 이루어지지않을 경우 공격자가 입력이 가능한 폼에 악의적인 스크립트를 삽입, 해당 스크립트가 희생자 측에서 동작하도록 하여 악의적인 행위를 수행하는 취약점을 말합니다.

 

<Stored XSS>

아래는 예시입니다.

 

<파일 업로드 취약점 대응책>

파일 업로드 디렉터리에 대한 문서 타입을 제어하기위해 httpd.conf 파일에 해당 디렉토리 섹션의 allowoverride 지시자에 all을 추가합니다.

이후 .htaccess를 생성한후 FileMatch 지시자를 이용하여 실행 파일에대한 직접적인 url 호출을 차단합니다. 또한 Addtype 지시자를 이용해서 php 파일들이나 여러 파일들을 html 문서로 처리하도록 합니다.

파일 업로드 크기를 제한하기위해서 httpd.conf 파일에 Directory 섹션의 LimitRequestBody 지시자를 이용할 수 있습니다.

 

<URL/파라미터 변조 취약점>

URL/파라미터의 사용자 입력값에대한 검증누락이 발생하면 생겨나는 취약점입니다.

 

<불충분한 세션 관리 취약점>

웹 어플리케이션에서 사용자가 로그인을 할 경우 매번 동일한 세션 ID를 발급하거나 세션 타임아웃을 너무 길게 설정하였을 경우 공격자가 다른 사용자의 세션을 재사용하여 해당 사용자의 권한을 탈취할 수 있는 취약점을 말합니다. 대응책으로는 httponly 속성 쿠기를 통한 보안대책이나 secure 속성 쿠키를 통한 보안이 있습니다.

 

<HTTP 응답 분할 취약점>

클라이언트 요청 파라미터 값이 서버 프로그램에서 쿠키, 리다이렉션 응답 헤더. 기타 응답 헤더 설정에 사용될 경우개행문자인 CR(%0D), LF(%0A)를 통해 응답을 분할하여 악의적인 코드를 삽입하여 XSS 등의 공격을 수행할 수 있는 취약점을 말합니다.

 

<XXE 인젝션 취약점>

취약한 XML 파서가 외부개체를 참조하는 XML 데이터를 처리할때 공격자가 삽입한 공격 구문이 포함된 외부개체가 동작하여 서버의 파일접근, 불필요한 자원 사용등이 발생할 수 있는 취약점 입니다.

대응책으로는  웹 어플리케이션에서 사용하는 XML 파서의 외부개체 참조 기능을 사용하지않도록 비활성화합니다. PHP의 경우에는 다음 함수를 이용하여 외부 개체 사용을 비활성화 할 수 있습니다.

 

- 웹 서버 취약점

<디렉터리 리스팅 취약점 대응책>

디렉터리 리스팅 대응책으로는 httpd.conf파일을 수정할 수 있습니다.

IIS의 경우에는 사이트 등록정보에서 디렉터리 검색 기능을 제거해줍니다.

 

<검색엔진 정보 노출 취약점>

검색엔진에의해 해킹에 필요한 정보가 검색되는 취약점을 말합니다. 이를 robots.txt파일로 막을 수 있습니다. robots.txt파일은 최상위 주소에 저장해야만합니다.

설정 예시)

User-agent: * //모두
Disallow : /	//모든것을 차단합니다.
	
User-agent: *	//모두
Disallow : 		//모든것을 허용합니다.

 

<심볼릭 링크 사용 설정 제거>

심볼릭 링크로 중요한 시스템 파일에 접근할 수 있으므로 사용 설정을 제거합니다. httpd.conf 파일의 예시입니다.

<Directory />
	Options FollowSymLinks   -> Options None
</Directory>

 

<웹 서버 설정파일 주요 지시자>

ServerSugnature를 Off로 설정하여 OS 모듈의 버전정보를 노출하지 않습니다.

 

<타임 아웃 관련 설정>

Timeout 120으로 설정하여 클라이언트의 요청에의해 서버와 연결이 된후 서버 간 아무런 메시지가 발생하지않을 동안의 대기시간으로 초단위로 지정합니다.

MaxKeepAliveRequests 100으로 설정해야합니다. 클라이언트와 서버 프로세스 간에 연결을 지속시키는 동안에 허용할 최대 요청 건수를 지정합니다. 

 

- SSL/TLS

<보안 가이드>

1. 키쌍 생성시 2048bit 이상의 키를 사용하고 서버 개인키에대한 접근은 최소화하며 안전하게 관리합니다.

2. 인증서 발급시 인증서 서명 알고리즘을 SHA-2(256bit)이상으로 설정합니다.

3. 인증서 발급 시 주체/소유자의 CN을 서브도메인까지 정확히 명시합니다. 명시하지않으면 임의의 서브도메인 인증서로 악용할 수 있기 때문입니다.

4. 신뢰할 수 있는 인증기관을 통해 인증서를 발급합니다.

 

<SSL/TLS 웹서버 설정 보안 가이드>

1. 취약한 암호화 통신 방법으로 알려진 SSL2.0, SSL3.0 프로토콜을 비활성화 하고 TLS1.0~TLS1.2 프로토콜을 사용합니다.

2. 취약한 암호방식을 사용하는 암호도구목록을 제거합니다.

 

- 이메일 보안

<주요 프로토콜>

SMTP : 25번 포트 사용을 합니다.

POP3 : 110번 포트를 사용하며 서버로부터 가지고온 후 서버에서 해당 메일을 삭제합니다.

IMAP : 143번 포트를 사용하며 메일을 서버로부터 가져온 후에도 서버에 해당 메일이 계속 남아있게 됩니다.

 

<access 파일 설정>

/etc/mail/access 파일을 통해 메일들을 받아들일지말지 전송해줄지말지 결정할 수 있습니다. 아래는 형식입니다.

적용대상 지정 처리 방식 지정

아래는 예시들 입니다.

#192.168.56으로 시작하는 대역을 메일 릴레이 허용
192.168.56 RELAY

#spam.com 도메인의 메일을 모두 거부(거부 메시지 보냄)
spam.con REJECT

#192.168.111.111 ip를 사용하는 메일 모두 폐기(거부 메시지 안보냄)
192.168.111.111 DISCARD

 

<이메일 인증기술 - SPF>

SPF(Sender policy framwork)는 수신자가 발신자의 ip와 도메인등 정보를 SPF 레코드를 통해 얻어서 실제 메일이 발신자로 부터 온 건지 확인할 수 있는 인증 기술입니다.

발신자는 발신 도메인 DNS서버에 SPF 정보를 TXT 레코드에 기록해야합니다. 아래는 SPF 정보의 예시입니다.

#1.1.1.1 이거나 2.2.2.0/24 대역이면 통과, 아니면 거부
"v=spf1 ip4:1.1.1.1 ip4:2.2.2.0/24 -all"

 

<DKIM 기술>

DKIN(domainKeys Identified Mail)은 수신된 이메일이 위변조 되지않았는지 수신자측에서 검증하 수 있는 이메일 인증 기술입니다. 발신자는 개인키로 서명후 메일을 발송하고 수신자는 공개키를 이용해 서명을 검증합니다.

발신자는 DNS에 DKIM레코드 정보를 TXT 레코드에 기록하여 등록해야합니디. 아래는 예시입니다.

<DMARC>

DMARC(Domain-based message authentication, reporting and conformance)는 발신측에서 메일 모니터링을 할 수 있는 이메일 인증 기술입니다. 발신측은 메일 관련 정책을 레코드로 등록해놓고 수신측은 메일 관련 정책을 보고 그 정책에따라 수행합니다. 

메일 관련 정책에는 SPF, DKIM등의 내용도 들어가 있어야합니다. 아래는 예시입니다.

p는 인증 실패시 처리 정책이고 sp는 서브도메인에대한 인증 실패시에대한 정책이고 rua는 실패 보고서 피드백의 메일 주소입니다.

 

- 데이터베이스 보안 위협

집성 : 낮은 보안 등급의 정보 조각들을 조합하여 높은 보안 등급의 정보를 알아내는 것을 말합니다. 예를들어 각 영업점의 매출액을 모두 조합하여 회사의 총 매출액을 계산할 수 있습니다.

추론 : 보안등급이없는 일반사용자가 보안으로 분류되지않은 정보를 정당하게 접근하여 기밀 정보를 유추해내는 행위를 말합니다. 예를들어 계약직 직원이 1명이라면 계약직 직원의 평균 연봉으로 1명의 연봉을 추론할 수 있습니다.

 

- 데이터베이스 보안 통제

접근 통제 : 사용자가 가진 접근 권한의 범위내에서 데이터 접근을 허용하는 기술적인 방법을 말합니다.

추론 통제 : 노출되는 데이터를 통해서 민감/기밀 데이터가 유추되어 공개되는 것을 방지하는 것을 말합니다.

흐름 통제 : 접근이 간으한 객체들 간의 정보의 흐름을 조정하는 것을 말합니다.

 

- 데이터베이스 취약점 점검

1. 디폴트 관리자 패스워드 및 계정명을 변경합니다. 초기 관리자의 패스워드는 없기때문에 패스워드를 설정해야줘야합니니다.

2. mysql 설치시 서버에 자동으로 생성되는 mysql 계정의 로그인을 차단합니다. /bin/false로 로그인 쉘을 변경하면됩니다.

 

3.원격에서 mysql 서버로의 접속을 차단합니다. my.cnf 파일을 수정합니다.

 

4. 데이터베이스의 사용자별 접속/권한 설정을 확인합니다.

kiwi88의 경우 파일 삭제 권한과 프로세스 정보 권한과 셧다운 권한이 있으므로 아이디를 삭제해야합니다.

 

5.mysql 버전 확인 및 보안 패치 적용여부를 점검합니다.

6. mysql 데이터 디렉터리 보호여부를 점검합니다. 디렉터리 접근권한을 750으로 설정합니다.

 

- 클라우드 컴퓨팅 보안

클라우드 서비스 모델의 종류는 아래와 같습니다.

1. laas : infrastructure as a service의 줄임말로 이용자에게 하드웨어만을 제공하는 서비스를 말합니다.

2. paas : platform as a sercvice의 줄임말로 개발, 테스트, 실행하는데 필요한 운영체제, 개발 환경등을 제공하는 서비스를 말합니다.

3. saas : software as a service의 줄임말로 클라우드 환경에서 동작하는 어플리케이션을 제공하는 서비스를 말합니다.

 

Comments