<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Technology Blog &#187; device ID</title>
	<atom:link href="http://ro.m-sec.net/tag/device-id/feed/" rel="self" type="application/rss+xml" />
	<link>http://ro.m-sec.net</link>
	<description>Omul este cel mai extraordinar computer</description>
	<lastBuildDate>Sat, 18 Jul 2015 10:45:40 +0000</lastBuildDate>
	<language>ro-RO</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>Securitatea aplicatiilor mobile (I): Speed Taxi</title>
		<link>http://ro.m-sec.net/2012/05/securitatea-aplicatiilor-mobile-i-speed-taxi/</link>
		<comments>http://ro.m-sec.net/2012/05/securitatea-aplicatiilor-mobile-i-speed-taxi/#comments</comments>
		<pubDate>Thu, 24 May 2012 17:56:13 +0000</pubDate>
		<dc:creator><![CDATA[Bogdan Alecu]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Securitate]]></category>
		<category><![CDATA[aplicatie]]></category>
		<category><![CDATA[device ID]]></category>
		<category><![CDATA[IMEI]]></category>
		<category><![CDATA[speedtaxi]]></category>

		<guid isPermaLink="false">http://ro.m-sec.net/?p=413</guid>
		<description><![CDATA[Săptămâna trecută am pus pe Facebook un screenshot privind modul în care a fost scrisă o aplicaţie disponibilă pe Google Market şi venisem cu ideea de a publica săptămânal câte un articol în care să fac o analiză asupra securităţii pentru o aplicaţie românească. Deşi nu a fost susţinută de un număr mare de persoane,<a href="http://ro.m-sec.net/2012/05/securitatea-aplicatiilor-mobile-i-speed-taxi/"> <br /><br /> (Read More...)</a>]]></description>
				<content:encoded><![CDATA[<p>Săptămâna trecută am pus pe Facebook un screenshot privind modul în care a fost scrisă o aplicaţie disponibilă pe Google Market şi venisem cu ideea de a publica săptămânal câte un articol în care să fac o analiză asupra securităţii pentru o aplicaţie românească. Deşi nu a fost susţinută de un număr mare de persoane, am zis să încerc un prim articol pentru a vedea totuşi cum merg lucrurile.</p>
<p>Aşadar, în funcţie de câţi doritori se vor arăta, voi continua seria săptămânală cu aceste articole. Ca pentru un prim articol, am decis să încep cu o aplicaţie care nu ar trebui să aibă un impact aşa mare asupra utilizatorilor. Ce date sensibile poate trimite o aplicaţie care te ajută să comanzi un taxi? Ei bine, după ce am analizat aplicaţia, se pare că există totuşi motive de îngrijorare.</p>
<p>Modul de funcţionare poate fi cel mai bine exprimat prin imagini:</p>
<p><a href="http://ro.m-sec.net/wp-content/uploads/2012/05/speedt1.png"><img class=" wp-image-431 alignnone" title="speedt1" src="http://ro.m-sec.net/wp-content/uploads/2012/05/speedt1.png" alt="" width="251" height="354" /></a>  <a href="http://ro.m-sec.net/wp-content/uploads/2012/05/speedt2.png"><img class="alignnone size-medium wp-image-432" title="speedt2" src="http://ro.m-sec.net/wp-content/uploads/2012/05/speedt2-212x300.png" alt="" width="212" height="300" /></a></p>
<p><a href="http://ro.m-sec.net/wp-content/uploads/2012/05/speedt3.png"><img class="alignnone size-medium wp-image-433" title="speedt3" src="http://ro.m-sec.net/wp-content/uploads/2012/05/speedt3-214x300.png" alt="" width="214" height="300" /></a>    <a href="http://ro.m-sec.net/wp-content/uploads/2012/05/speedt4.png"><img class="alignnone size-medium wp-image-434" title="speedt4" src="http://ro.m-sec.net/wp-content/uploads/2012/05/speedt4-212x300.png" alt="" width="212" height="300" /></a></p>
<p>O aplicaţie pentru smartphone, ce comunică folosind Internetul, diferă de modul de testare a unei aplicaţii web. În primul rând, putem analiza ce fişiere sunt create în timpul înstalării şi al utilizării &#8211; cum stochează informaţiile? sunt criptate? Apoi putem testa partea de validare a informaţiilor, logica funcţionării şi, în ultimul rând, dacă schimbul de informaţii dintre aplicaţie şi server se realizează în mod securizat.</p>
<p>Aşadar, despre fişierele create. În timpul utilizării am salvat locaţia unde am biroul virtual şi apoi am plasat o comandă. Câteva fişiere au fost create pe parcursul acestui proces:</p>
<blockquote><p>/data/data/ro.mobiessence.android.clevertaxi.speedtaxi/files/DATA_Tiles_3<br />
/data/data/ro.mobiessence.android.clevertaxi.speedtaxi/files/DATA_Tiles_4<br />
data/data/ro.mobiessence.android.clevertaxi.speedtaxi/files<br />
/data/data/ro.mobiessence.android.clevertaxi.speedtaxi/shared_prefs<br />
/data/data/ro.mobiessence.android.clevertaxi.speedtaxi/shared_prefs/settings.xml</p></blockquote>
<p>&nbsp;</p>
<p><a href="http://ro.m-sec.net/wp-content/uploads/2012/05/accessed_created_files.png"><img class="alignnone size-medium wp-image-427" title="accessed_created_files" src="http://ro.m-sec.net/wp-content/uploads/2012/05/accessed_created_files-300x92.png" alt="" width="300" height="92" /></a></p>
<p>Oare ce o fi în settings.xml?</p>
<p>shell@android:/data/data/ro.mobiessence.android.clevertaxi.speedtaxi/shared_pref<br />
s # cat settings.xml<br />
cat settings.xml<br />
&lt;?xml version=&#8217;1.0&#8242; encoding=&#8217;utf-8&#8242; standalone=&#8217;yes&#8217; ?&gt;<br />
&lt;map&gt;<br />
&lt;string name=&#8221;opt5&#8243;&gt;&lt;/string&gt;<br />
<strong>&lt;string name=&#8221;lastName&#8221;&gt;Popescu&lt;/string&gt;</strong><br />
&lt;string name=&#8221;opt6&#8243;&gt;&lt;/string&gt;<br />
<strong>&lt;string name=&#8221;phone&#8221;&gt;1234567&lt;/string&gt;</strong><br />
&lt;string name=&#8221;opt3&#8243;&gt;&lt;/string&gt;<br />
&lt;string name=&#8221;opt4&#8243;&gt;&lt;/string&gt;<br />
&lt;string name=&#8221;opt9&#8243;&gt;&lt;/string&gt;<br />
&lt;string name=&#8221;opt7&#8243;&gt;&lt;/string&gt;<br />
&lt;string name=&#8221;opt8&#8243;&gt;&lt;/string&gt;<br />
&lt;boolean name=&#8221;showMapPositionInfo&#8221; value=&#8221;false&#8221; /&gt;<br />
<strong>&lt;string name=&#8221;email&#8221;&gt;ion@popescu.ro&lt;/string&gt;</strong><br />
&lt;string name=&#8221;firstName&#8221;&gt;Ion&lt;/string&gt;<br />
&lt;string name=&#8221;opt2&#8243;&gt;&lt;/string&gt;<br />
&lt;string name=&#8221;<strong>myAddresses</strong>&#8222;&gt;[{&amp;quot;gps_lng&amp;quot;:<strong>26.145351</strong>,&amp;quot;localityName&amp;qu<br />
ot;:&amp;quot;Bucure╚Öti&amp;quot;,&amp;quot;building&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;gps_lat&amp;quot;<br />
:<strong>44.43555</strong>,&amp;quot;street&amp;quot;:&amp;quot;<strong>Strada Maior Ion Coravu</strong>&amp;quot;,&amp;quot;name&amp;quot<br />
;:&amp;quot;<strong>Birou</strong>&amp;quot;,&amp;quot;address_details&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;streetNo&amp;quot<br />
;:&amp;quot;<strong>5</strong>&amp;quot;,&amp;quot;entrance&amp;quot;:&amp;quot;&amp;quot;}]&lt;/string&gt;<br />
&lt;string name=&#8221;opt1&#8243;&gt;&lt;/string&gt;<br />
&lt;/map&gt;</p>
<p>Interesant, deci adresa din comandă e stocată aici, dar şi adresa(le) salvată de mine cu denumirea &#8222;Birou&#8221;. Totul plain text, bineînţeles.</p>
<p><a href="http://ro.m-sec.net/wp-content/uploads/2012/05/settings-file.png"><img class="alignnone size-medium wp-image-428" title="settings-file" src="http://ro.m-sec.net/wp-content/uploads/2012/05/settings-file-300x173.png" alt="" width="300" height="173" /></a></p>
<p>Acum să trecem la partea de cod &#8211; ce se ascunde în spatele aplicaţiei? Pentru început, permisiunile necesare care sunt multe şi cer acces la o groază de lucruri.</p>
<blockquote><p>Your location<br />
coarse (network-based) location<br />
fine (GPS) location</p>
<p>Network communication<br />
full Internet access</p>
<p>Your personal information<br />
read contact data</p>
<p>Phone calls<br />
read phone state and identity</p>
<p>System tools<br />
prevent tablet from sleeping prevent phone from sleeping<br />
modify global system settings</p>
<p>Your accounts<br />
discover known accounts</p>
<p>Hardware controls<br />
control vibrator</p>
<p>Network communication<br />
view network state</p></blockquote>
<p>Pentru ce naiba sunt necesare atâtea permisiuni pentru o simplă aplicaţie de comandă a unui taxi nu pot înţelege. Cele de mai sus se găsesc şi în fişierul manifest, aşa cum e normal:</p>
<p><a href="http://ro.m-sec.net/wp-content/uploads/2012/05/manifest.png"><img class="alignnone size-medium wp-image-429" title="manifest" src="http://ro.m-sec.net/wp-content/uploads/2012/05/manifest-300x151.png" alt="" width="300" height="151" /></a></p>
<p>La partea de cod recunosc că nu am destule cunoştinţe pentru a spune dacă este bun sau nu, însă în mare mi-am format o idee. Parcurgând clasele, mi-a sărit în ochi următoarea parte de cod:</p>
<p><a href="http://ro.m-sec.net/wp-content/uploads/2012/05/app-code.png"><img class="alignnone size-medium wp-image-430" title="app-code" src="http://ro.m-sec.net/wp-content/uploads/2012/05/app-code-300x214.png" alt="" width="300" height="214" /></a></p>
<p>Cum adică IMEI? De ce ai tu, ca şi companie, nevoie de IMEI-ul telefonului? Dar să vedem mai departe&#8230;</p>
<p>Pe partea de comunicaţie încep prin a spune că aceasta se face total necriptat şi nesecurizat. Aşa cum menţionam anterior, se pare că aplicaţia ia şi codul IMEI al telefonului, însă nu înseamnă neapărat că îl şi transmite. Pentru a verifica acest lucru, aplicaţia am pus-o într-un emulator cu drepturi de root, deci nu are un dispozitiv GPS de care se poate folosi pentru a transmite locaţia.</p>
<p>Dacă se doreşte setarea unei anumite locaţii, aceasta se poate face făcând telnet pe host-ul şi portul emulatorului, după care se dă comanda</p>
<blockquote><p>geo fix 44.445818 26.097261<br />
OK</p></blockquote>
<p>Astfel am putut ajunge la ecranul de iniţiere al comenzii pentru un taxi. Am selectat o stradă oarecare din Bucureşti (Vasile Alecsandri în cazul meu) şi am plasat comanda. Alte detalii cerute au fost numele, prenumele, numărul de telefon, adresa de email (opţional, dar detectată automat dacă e pus un cont Google), nr străzii. După un timp de aşteptare a venit şi răspunsul prin care eram anunţat că o maşină va sosi. Din păcate aplicaţia crapă la primirea răspunsului, însa acest lucru se datorează faptului că rulează pe emulator.</p>
<p>Ce s-a văzut pe partea de comunicaţii e şi mai interesant. În primul rând, traficul făcut către Google maps pentru alegerea locaţiei:</p>
<blockquote><p>POST /glm/mmap/a HTTP/1.1<br />
Connection: close<br />
Content-Type: application/binary<br />
Content-Length: 246<br />
Host: www.google.com<br />
User-Agent: GMM/3.0 (generic FRF91); gzip</p>
<p>l&gt;oen_USandroid:generic-generic-sdk1.6gmm-unknown&gt;<br />
484*2ro.mobiessence.android.clevertaxi.core.MapPosition&#8217;0ZZHmFlvayvSoFQMRT9YYJSmpU2MCZTefLJ8A7w 3c89da0d4bcf25309dd0cb0592b07628db7d646fd19395a%I</p>
<p>GET /maps/geo?q=44.450539,26.093816&amp;output=json&amp;sensor=false HTTP/1.1<br />
Host: maps.google.com<br />
Connection: Keep-Alive<br />
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)</p>
<p>HTTP/1.1 200 OK<br />
Content-Type: text/javascript; charset=UTF-8<br />
Vary: Accept-Language<br />
Date: Sun, 20 May 2012 11:32:50 GMT<br />
Server: mafe<br />
Cache-Control: private<br />
X-XSS-Protection: 1; mode=block<br />
X-Frame-Options: SAMEORIGIN<br />
Transfer-Encoding: chunked</p>
<p>34e<br />
{<br />
&#8222;name&#8221;: &#8222;44.44982,26.09424&#8221;,<br />
&#8222;Status&#8221;: {<br />
&#8222;code&#8221;: 200,<br />
&#8222;request&#8221;: &#8222;geocode&#8221;<br />
},<br />
&#8222;Placemark&#8221;: [ {<br />
&#8222;id&#8221;: &#8222;p1&#8243;,<br />
&#8222;address&#8221;: &#8222;Strada Vasile Alecsandri, Bucharest, Romania&#8221;,<br />
&#8222;AddressDetails&#8221;: {<br />
&#8222;Accuracy&#8221; : 6,<br />
&#8222;Country&#8221; : {<br />
&#8222;CountryName&#8221; : &#8222;Romania&#8221;,<br />
&#8222;CountryNameCode&#8221; : &#8222;RO&#8221;,<br />
&#8222;Locality&#8221; : {<br />
&#8222;DependentLocality&#8221; : {<br />
&#8222;DependentLocalityName&#8221; : &#8222;Sector 1&#8243;,<br />
&#8222;Thoroughfare&#8221; : {<br />
&#8222;ThoroughfareName&#8221; : &#8222;Strada Vasile Alecsandri&#8221;<br />
}<br />
},<br />
&#8222;LocalityName&#8221; : &#8222;Bucharest&#8221;<br />
}<br />
}<br />
},<br />
&#8222;ExtendedData&#8221;: {<br />
&#8222;LatLonBox&#8221;: {<br />
&#8222;north&#8221;: 44.4516889,<br />
&#8222;south&#8221;: 44.4489910,<br />
&#8222;east&#8221;: 26.0956247,<br />
&#8222;west&#8221;: 26.0929267<br />
}<br />
},<br />
&#8222;Point&#8221;: {<br />
&#8222;coordinates&#8221;: [ 26.0942727, 44.4503400, 0 ]<br />
}<br />
} ]<br />
}</p>
<p>0</p></blockquote>
<p><a href="http://ro.m-sec.net/wp-content/uploads/2012/05/maps-selection.png"><img class="alignnone size-medium wp-image-419" title="maps-selection" src="http://ro.m-sec.net/wp-content/uploads/2012/05/maps-selection-300x219.png" alt="" width="300" height="219" /></a></p>
<p>După setarea poziţiei pe hartă şi completarea celorlalte date, am iniţiat comanda. În acest moment se face o cerere plaintext către un server general, pe portul 5454, în care se transmit mai multe informaţii:</p>
<p>&#8211; nume, prenume<br />
&#8211; număr telefon<br />
&#8211; <strong>codul IMEI al telefonului (!!!)</strong><br />
&#8211; acurateţea poziţionării, latitudine, longitudine, localitate, stradă<br />
&#8211; adresa email<br />
&#8211; compania de taxi pentur care s-a făcut cererea<br />
&#8211; <strong>ID-ul unic al dispozitivului</strong><br />
&#8211; data,ora comenzii</p>
<p>În format brut, aşa arată informaţia cerută</p>
<p>{&#8222;data&#8221;:{&#8222;order&#8221;:{&#8222;lname&#8221;:&#8221;Popescu&#8221;,&#8221;no_cars&#8221;:1,&#8221;tel&#8221;:&#8221;12345678&#8243;,&#8221;<strong>imei</strong>&#8222;:&#8221;000000000000000&#8243;,&#8221;versioncode&#8221;:&#8221;4&#8243;,&#8221;networklocation&#8221;:{&#8222;<strong>accuracy</strong>&#8222;:&#8221;0.0&#8243;,&#8221;lng&#8221;:&#8221;44.445816&#8243;,&#8221;lat&#8221;:&#8221;26.09726&#8243;},&#8221;timestamp&#8221;:1337512997867,&#8221;source&#8221;:&#8221;android&#8221;,&#8221;details&#8221;:&#8221;&#8221;,&#8221;email&#8221;:&#8221;&#8221;,&#8221;token&#8221;:&#8221;3007e861b1823e13fbd2c6afc3539c7f&#8221;,&#8221;address&#8221;:&#8221;Strada Vasile Alecsandri 3, Bucharest&#8221;,&#8221;company&#8221;:{&#8222;id&#8221;:&#8221;3&#8243;,&#8221;<strong>name</strong>&#8222;:&#8221;Speed Taxi&#8221;},&#8221;gps&#8221;:{&#8222;lng&#8221;:&#8221;26.09424&#8243;,&#8221;lat&#8221;:&#8221;44.44982&#8243;},&#8221;fname&#8221;:&#8221;Ionel&#8221;,&#8221;<strong>deviceId</strong>&#8222;:&#8221;9774d56d682e549c&#8221;}},&#8221;status&#8221;:&#8221;success&#8221;}</p>
<p><a href="http://ro.m-sec.net/wp-content/uploads/2012/05/cerere-comanda.png"><img class="alignnone size-medium wp-image-418" title="cerere-comanda" src="http://ro.m-sec.net/wp-content/uploads/2012/05/cerere-comanda-300x105.png" alt="" width="300" height="105" /></a></p>
<p>De ce este nevoie să transmită codul IMEI şi deviceID nu înţeleg. O posibilă explicaţie ar fi pentru a preveni comenzile făcute abuziv de la un anumit dispozitiv, dar chiar şi aşa sunt prea multe date transmise, mai ales că se trimit nesecurizat. Apple a început să refuze aplicaţiile care cer acest identificator unic &#8211; <a title="Apple UDID" href="http://lifehacker.com/5898282/what-a-udid-is-and-why-apples-rejecting-apps-that-want-yours" target="_blank">vezi aici</a>.</p>
<p>Faptul că se specifică şi numele companiei de taxi în pachetul transmis mă face să cred că de fapt datele ajung mai întâi la un terţ, abia apoi fiind transmise către compania ce va onora comanda. Am găsit această aplicaţie, desigur cu datele de identificare schimbate şi pentru alte companii de taxi din Bucureşti iar aplicaţia e făcută de aceeaşi firmă în toate cazurile.</p>
<p>Observaţi număr pus de mine &#8211; 12345678 &#8211; aşa că nu aveam aşteptări prea mari să şi primesc comanda. În plus, dacă vă uitaţi atent vedeţi şi faptul că acurateţea e zero, deci e aproape sigur faptul că poziţionarea pe hartă am făcut-o manual. Dar asta deja ţine de logic flaw. Cu toate acestea, după un timp de aşteptare de aprox 1 minut, a venit şi răspunsul de la server:</p>
<p><a href="http://ro.m-sec.net/wp-content/uploads/2012/05/onorare-comanda.png"><img class="alignnone size-medium wp-image-417" title="onorare-comanda" src="http://ro.m-sec.net/wp-content/uploads/2012/05/onorare-comanda-300x82.png" alt="" width="300" height="82" /></a></p>
<p>Comanda a fost onorată cu succes şi urmează să ajungă în 3 minute maşina cu indicativul 139. Îmi cer scuze pentru comanda falsă &#8211; promit să mai fac <img src="http://ro.m-sec.net/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Singura protecţie întâlnită a fost cea prin care se verifică localitatea, răspunsul primit fiind &#8222;You are out of accepted area&#8221;.</p>
<p><a href="http://ro.m-sec.net/wp-content/uploads/2012/05/neonorare-comanda.png"><img class="size-medium wp-image-416 alignnone" title="neonorare-comanda" src="http://ro.m-sec.net/wp-content/uploads/2012/05/neonorare-comanda-300x96.png" alt="" width="300" height="96" /></a></p>
<p>&nbsp;</p>
<p><strong>Concluzii</strong></p>
<p>Eu unul nu voi mai folosi această aplicaţie, atât din cauza informaţiilor transmise, dar şi pentru că am vrut să fac o comandă la un moment dat şi mi-a cerut numărul străzii &#8211; păi dacă îl ştiam mai apelam la o astfel de aplicaţie?</p>
<p>Aştept feedback pentru a vedea dacă sunteţi interesaţi să testez şi alte aplicaţii româneşti.</p>
<p>Ah şi încă ceva: dacă cineva e dispus să doneze un iPhone (preferabil ultima versiune) voi testa şi aplicaţiile pentru iOS <img src="http://ro.m-sec.net/wp-includes/images/smilies/simple-smile.png" alt=":)" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ro.m-sec.net/2012/05/securitatea-aplicatiilor-mobile-i-speed-taxi/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>
