[php/flash/e.a.] hoe kan je webprogramma's beveiligen

Pagina: 1
Acties:
  • 120 views sinds 30-01-2008
  • Reageer

Onderwerpen


  • Zynth
  • Registratie: September 2001
  • Laatst online: 17-09 16:56
Ik vraag me af of het mogelijk is om webprogrammaatjes,
zoals een flashprogramma, te beveiligen tegen url-hackers.

bijvoorbeeld; je hebt een spelletje gemaakt in flash,
zoals bijvoorbeeld http://www.spele.nl/sport7.htm.
Mensen kunnen daarmee ook hun highscore versturen.
Hoe kan je dat zo maken dat het NIET mogelijk is om vals te spelen?
JE zou namelijk in dit geval erg simpel dat flash-filmpje kunnen downloaden,
decompilen, kijken welke url aangeroepen wordt en dan handmatig in
internet explorer die url plakken en je score een beetje 1000x zo hoog maken.

Is er een manier om zoiets helemaal secure te doen?
(zodat niemand kan valsspelen).

Op deze site http://www.playsite.com kan je spelletjes
spelen (in java), waar je geld mee kan winnen.
Ik neem aan dat dat echt 100% secure is, anders heb je een probleem
als exploitant.
Hoe is dat gedaan of kan dat gedaan worden?

  • Sendy
  • Registratie: September 2001
  • Niet online
Nee, dat kan niet. Onmogelijk. Je kan het heel lastig maken, maar een goede hacker kan het zeker 'kraken'.

[ Voor 56% gewijzigd door Sendy op 12-08-2004 15:15 ]


  • Zynth
  • Registratie: September 2001
  • Laatst online: 17-09 16:56
misschien is dat waar,
maar zoals ik zei; sommige sites leven ervan.
En het mag daar niet zo zijn dat een hackertje er ff
met de hoofdprijs vandoor gaat.
Verder is het deadlock probleem ook ooit opgelost.
Hier zou toch een oplossing voor moeten zijn?
Alles mag gebruikt worden hoor;
sockets, etc...

Iemand? :)

Verwijderd

Zoals Sendy al zei, je kan het heel moeilijk maken, maar het blijft altijd mogelijk. Echter is Flash eenvoudiger te "hacken" dan een java programmaatje... Ter beveiliging kun je bijvoorbeeld denken aan het posten van een score met een unieke identifier die voor een korte tijd geldig is. Dus die door bijvoorbeeld een socketconnectie vlak voor de post door de server wordt toegekent (socketconnecties worden trouwens steeds vaker toegepast ism een authenticatie programmaatje in bijv java). Of je veranderd om de xxx seconden/minuten/uren de url (dynamisch uiteraard) van het bestand waar de score naartoe wordt gepost. Of je zet 1001 valse url's in je flash en door een ingewikkeld stukje code reken je daaruit de juiste url uit (heeft de "hacker" een leuke puzzel aan). En zo kan ik nog wel een tiental dingen verzinnen, maar het blijft een moeilijke zaak om alles echt pot dicht te krijgen als je met Flash iets dergelijks probeert te beveiligen... Je brengt in feite zoveel mogelijk hindernissen aan.

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Challenge-response zoeken.

En ik weet niet waar het voor is, maar niet alles kan gebruikt worden als je op het internet bezig bent, sockets vallen al heel snel af omdat mensen via firewalls / proxy's etc ook surfen.

[ Voor 80% gewijzigd door Gomez12 op 12-08-2004 16:05 ]


  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14

pietje63

RTFM

Idd, ik zou ook werken met de volgende dingen
- korte tijd geldige id
- versleutelde code
- GEEN foutmelding geven als vals gespeeld is en WEL opname in highscorelijst (dan denkt hij dat het gelukt is) en pas paar dagen later verwijderen
- controle op tijd tussen begin spel, eind spel en score (in 2 seconde kun je geen hoghscore halen)

Maarja, flash kun je vrij makkelijk uit elkaar halen...

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


  • Zynth
  • Registratie: September 2001
  • Laatst online: 17-09 16:56
hmm, het is inderdaad wel een probleem, dat weet ik.
Veel van de technieken die genoemd zijn pas ik al toe,
zoals kijken of de tijd reëel is, maar ik ben toch niet erg blij als er
geen goede manier is ;)
java is eigenlijk niet echt een goede optie, omdat in xp geen
java zit. En mensen eerst een pakket van 20mb laten downloaden
verhoogt de drempel toch wel te erg :S

Verwijderd

Zynth schreef op 12 augustus 2004 @ 16:19:
java is eigenlijk niet echt een goede optie, omdat in xp geen
java zit. En mensen eerst een pakket van 20mb laten downloaden
verhoogt de drempel toch wel te erg :S
Voor serverside Java hoeft niemand iets te downloaden hoor ;)
Daarnaast als het echt om geld gaat dan zijn mensen best bereid om 20Mb te downloaden (stel je maakt het client-side in Java), zolang je maar benadrukt dat het om security issues gaat..

Verder lijkt me dat een tijdmeting niet zoveel uithaalt, want ik aan ook doen alsof ik op tijdstip a beging en op tijdstip b post ik alsnog de score... Het is wel weer een extra hindernis.

  • Sendy
  • Registratie: September 2001
  • Niet online
Als mijn computer iets doet kan ik zien wat en hem iets anders laten doen. Als ik dus zie dat-ie een blob binary data over internet verstuurd, kan ik dat afvangen en andere binary data opsturen. Hiervoor heb ik dus alleen de kennis nodig van wat mijn computer precies gedaan heeft voordat hij de data opstuurde.

Als ik een programma draai kan ik de machine instructies lezen en zo erachter komen wat de computer doet en hoe ik dat moet wijzigen. Flash kan je decompileren, java kan je decompileren.

Je kan het dus alleen zo moeilijk mogelijk maken, maar niet geheel veilig. Ik zou dus lekker die spelletjes op internet spelen en kraken dan verdien je nog eens iets. ;)

  • Zynth
  • Registratie: September 2001
  • Laatst online: 17-09 16:56
mja...
ik dacht zelf toch meer aan iets zoals je bij solitaire zou kunnen doen;
de server bepaalt je deck kaarten.
elke keer dat je een kaart omdraait of verplaatst wordt dit aan de server
gemeldt; deze valideerd (ook) of de zet valide is.
Zo kan je nooit "even" een highscore opsturen; de server weet dan immers
of jij het hele spel gespeeld hebt. Je zou dan een heel programma moeten
maken wat ook solitaire implementeerd en voor jou zo snel mogelijk
dat spel kan uitspelen.
Dat werkt niet, en dat is bijvoorbeeld de bariere die ik zocht :)

maar hoe zou je zoiets bij dat "bal-hooghoudt-spelletje" uit mijn eerste post moet gaan maken? :| ideeën? ;)
dat spelletje is namelijk eigenlijk supersimpel.

[ Voor 6% gewijzigd door Zynth op 12-08-2004 17:03 ]


  • Sendy
  • Registratie: September 2001
  • Niet online
Je hebt gelijk als je iedere actie op de server verifieerd. Maar tijd tellen wordt dan al lastig (want iemand met een langzame internet verbinding heeft dan nadeel).

Als je niet alles kan verifieren op een server (stuiter bal -> geef door aan server (gebruiker wacht) -> server zegt ok -> gebruiker stuitert bal) zal het niet gaan. Als je je daar niet bij neer wil leggen stop ik wel met reageren. (En anders ook, want dan is er niets te reageren ;) )

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

offtopic:
Zynth: je plaatst continu zelf 'enters' in je posts, dat leest erg onprettig :) Typ gewoon je regels door, het forum zal zelf de linebreaks wel op de goede plaatsen zetten ;)

Professionele website nodig?


  • Zynth
  • Registratie: September 2001
  • Laatst online: 17-09 16:56
tijd tellen heeft in dat geval ook geen functie :) alleen wil ik kunnen voorkomen dat iemand gewoon een wilde score submit. het gaat er nu om hoe je zo'n bal-hooghoudt-spelletje het best kan beveiligen.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Wat je zou kunnen doen is de flash file doorsturen vanuit een serverside bestand en die een sessie aan laten maken. Deze sessie heb je nodig om een score te posten.

Zo kun je alleen een score posten vanuit de flashfile als het goed is. Of in iedergeval alleen vanuit de pagina waarin de flashfile is geladen. Dus niet met een extern scriptje ofzo.

Hier is vast ook wel omheen te werken, maar maakt het al een stuk lastiger weer.

[ Voor 11% gewijzigd door Bosmonster op 12-08-2004 17:50 ]


Verwijderd

Ik vind een discussie over wat je allemaal kan doen om Flash iets veiliger te maken heel interessant en het is jammer dat het op dit moment zo belabbert is om een goede beveiliging aan te brengen.
Echter is de vraag ook vaak: hoe goed moet ik mijn scoreboard beveiliging, oftewel hoeveel schade richt iemand aan als de score vals is? Hoe moeilijk is dat te controlleren? (komen er duizenden bezoekers, of gaat het om een max van 10 scores per dag, wat overzichtelijk is en je eventuele fraude direct door hebt).
Het hangt dus een beetje af van het aantal bezoekers, de populairiteit en de schade die aangericht kan worden. Ik denk dat het bij jouw spelletje eigenlijk helemaal niet zo belangrijk is. Al helemaal omdat het simpelweg veel te ingewikkeld wordt... Kwestie van kosten/baten lijkt mij.

Of verwacht je duizenden spelers en ga je honderden euro's aan prijzen uitdelen? In dat geval, post dan de url ff :Y)

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Bij een score hoort een hash, die kun je niet raden.
Voorbeeldje (pseudophp)
PHP:
1
2
3
4
$gescoord = 10000;
$hash = md5((string)$gescoord . 'een random string');
verstuur_naar_server($gescoord,$hash);
you_get_the_idea();

  • Deikke
  • Registratie: Juni 2004
  • Laatst online: 06:44
als je weet hoe het gemaakt wordt kan je die ook wel weer aanmaken

  • Anders
  • Registratie: December 2000
  • Laatst online: 13-09 18:52
Sendy schreef op 12 augustus 2004 @ 16:50:
Als mijn computer iets doet kan ik zien wat en hem iets anders laten doen. Als ik dus zie dat-ie een blob binary data over internet verstuurd, kan ik dat afvangen en andere binary data opsturen. Hiervoor heb ik dus alleen de kennis nodig van wat mijn computer precies gedaan heeft voordat hij de data opstuurde.
.. en dat kan je makkelijk zien met Burp Proxy:
http://portswigger.net/proxy/

.. hiermee kun je alle verkeer van en naar de server afvangen, on-the-fly wijzigen etc.
Bosmonster schreef op 12 augustus 2004 @ 17:50:
Wat je zou kunnen doen is de flash file doorsturen vanuit een serverside bestand en die een sessie aan laten maken. Deze sessie heb je nodig om een score te posten.
Zo kun je alleen een score posten vanuit de flashfile als het goed is. Of in iedergeval alleen vanuit de pagina waarin de flashfile is geladen. Dus niet met een extern scriptje ofzo.
Een scriptje waarmee zo'n pagina automatisch wordt opgehaald is snel geschreven, daarmee heb je de sessie te pakken die je weer kunt gebruiken om een scoren te submitten. Natuurlijk zal het voor 99% van de bezoekers te moeilijk zijn, maar het is nou net die ene procent die het wel kan, die je score verziekt.

---

Andere problemen die je hebt:
  • Cookie-based security is simpel te hacken.
  • IP-based security is vrij simpel te hacken/omzeilen. Internet barst van de lijsten met anonymous proxies.
  • Referrer-based security is vrij simpel te faken.
Mijn tips:

1. Gebruik time delays. De tijd tussen verschillende games dient minimaal x seconden te bedragen. De tijd tussen verschillende antwoorden dient minimaal x seconden te bedragen etc. Zo frustreer je geautomatiseerde scripts die alles direct processen.
2. Vraag een visuele herkenning (letters/cijfers verwerkt in een plaatje die overgetypt moeten worden). Zo frustreer je volledig geautomatiseerde scripts.
3. Gebruik korte-tijd-authorisatie zoals DoktorAnders (geen familie :) ) al aangaf. Hiermee voorkom je dat mensen handmatig via programmaatjes als Burp Proxy, een en ander kunnen aanpassen: daar is dan geen tijd voor.


Een Flash/PHP-game die ik ooit met een Flasher heb gemaakt en waarmee voor enkele duizenden euro's aan prijzen weggegeven werden, is niet gehacked. Het maakte gebruik van:
  • Bestandscontrole (stylesheet, javascript, pagina, flash-bestanden etc moesten in een bepaalde sessie geladen zijn)
  • Sessie heeft slechts een beperkte geldigheidsduur
  • Foutmeldingen werden niet doorgegeven (sterke opmerking van pietje63). Men kon gewoon het hele spel spelen met alle client-server-interactie van dien, en pas op het eind werd duidelijk dat de score niet werd geaccepteerd.
  • Versleuteling van heen-en-weer-gestuurde data. De ontsleuteling staat natuurlijk in Flash gescript, maar het voorkomt in ieder geval dat mensen met een programma als Burp Proxy kunnen zien wat er heen en weer wordt gestuurd
  • Getallen werden niet doorgegeven als getallen op zich, maar als een modulus. In plaats van (bv) 19 stuurde je dan 285112891 terug, in plaats van 20 bijvoorbeeld 18085538. Immers, 285112891%48357 = 19, 18085538%48357 =20 etc. Dat getal staat dan wel in de Flash-file of wordt ook weer doorgestuurd, maar het is een extra hindernis. Score submitten geschiedde ook op dezelfde manier.
  • Time delays: minimum aantal seconden tussen bepaalde stappen
  • Er werden een aantal fake variabelen mee- en teruggestuurd
Bovendien sloegen we van alles op ter controle
  • Elke bezoekssessie kreeg een eigen identifier
  • Elke game kreeg een eigen identifier
  • Identifiers werden gekoppeld aan ip/browser/andere gegevens
.. en hadden en een lijst met IP-adressen van ca. 25.000 proxy-servers en gingen in de beheeromgeving een alarmbel rinkelen wanneer iemand een IP-adres uit die lijst had gebruikt.

/edit: er werden wel pogingen tot hacken gedaan. Het is erg leuk om te zien wat mensen allemaal uitvreten. Scriptjes werden geschreven, programma's ontwikkeld, anonymous proxies ingezet, NAW-gegevens volautomatisch gegenereerd etc (die laatste wel allemaal volgens herkenbare patronen). In de logs kwamen we via referrers websites tegen waar het werd besproken en uitgeplozen :)

[ Voor 5% gewijzigd door Anders op 12-08-2004 21:09 ]

Ik spoor veilig of ik spoor niet.


Verwijderd

Zynth schreef op 12 augustus 2004 @ 16:19:
java is eigenlijk niet echt een goede optie, omdat in xp geen
java zit.
Maar in XP zit toch ook niet de laatste versie van Flash?

Acties:
  • 0 Henk 'm!

  • Zynth
  • Registratie: September 2001
  • Laatst online: 17-09 16:56
bedankt Anders voor je enorm uitgebreide en goede post :) Alleen dat eerste stukje van de sessie begrijp ik nog niet helemaal goed. En hoe je al die controle dingen opsloeg.

Verder gaat het hier inderdaad ook om duizenden bezoekers en prijzen van over de 1000 euro. Alleen moet je om te spelen wel 80cpm betalen ;) op zich natuurlijk een afschrik voor hackers; even proberen de boel te hacken kan je flink centen kosten.

eneh; henk_de_man, flash is meer in de orde 300kb dan 20mb, en flash 5 voldoet voor de meeste dingen prima...

[ Voor 14% gewijzigd door Zynth op 13-08-2004 00:36 ]


Acties:
  • 0 Henk 'm!

  • miw
  • Registratie: November 2002
  • Laatst online: 12-09 17:59

miw

De client waar de flash draait kan je nooit vertrouwen, maar je kan het vrij lastig maken om "vals" te spelen. Een belangrijk aspect dat je kan gebruiken is tijd. Je weet welke files er wanneer naar een bepaalde client gestuurd zijn. Dit op basis van allerlei gegevens. Het spel spelen met een bepaald resultaat zal binnen een bepaalde tijd moeten gebeuren. Vandaar het concept "sessie".
Een ander aspect wat je kan gebruiken is het frustreren van het automatisch spelen. Naast de al genoemde maatregelen, kan je dan ook verschillende implementaties maken van diverse functies en die in verschillende combinaties naar verschillende clients sturen.

Acties:
  • 0 Henk 'm!

  • Anders
  • Registratie: December 2000
  • Laatst online: 13-09 18:52
Ander belangrijk aspect aan sessies is dat je kan nagaan wat er allemaal is geprobeerd tijdens een bezoek.

In ons geval wilden we voorkomen dat met een programmaatje alleen het php-bestand en de XML-bestanden werden binnengehaald (*). Men moest het spel echt op de site spelen dus

[root]
- [script]
- [game.js]
- [style]
- [style.css]

game.js was een directory met daarin een index.php. Met <script src="script/game.js"></script> wordt dit PHP-bestand aangeroepen, dat binnen de sessie een flag zette dat het script geladen was. Het gaf gewoon een script terug.
style.css werkte op dezelfde manier, en ook van de homepage werd bijgehouden of die was geladen. Werd een score gesubmit waarbij deze zaken niet waren geladen, dan werd de score als invalid opgeslagen.

Overigens hebben ge nog gevogeld met het dynamisch setten van Flash-variabelen via JavaScript, maar dat bleek niet browser-compatible te krijgen.

Ik kom nog iets anders tegen wat werd gebruikt om te bepalen of een deelname geldig was of niet: Het IP-adres waarmee het spel was begonnen, moe(s)t hetzelfde zijn als het IP-adres waarmee het spel werd beëindigd. Dit bleek in de praktijk problemen op te leveren bij de klant die gebruik maakte van een proxy dat wisselde tussen 4 IP-adressen, maar die nam het voor lief.


(*) Bij een andere site waar men moest kunnen stemmen per Flash/PHP, werd een visuele herkenning ingebouwd. Bleek dat er mensen waren die de hele procedure buiten een browseromgeving om simuleerden met een programmaatje, zodat je alleen nog maar de code van het plaatje hoefde over te typen. Werkte via anonymous proxies, met volautomatische NAW-generator etc etc. Uiteindelijk hebben we de code voor de ons bekende anonymous proxy-IP-adressen, extra lang en lastig gemaakt, zodat de fun er snel af was. Bovendien was de NAW-generator dusdanig herkenbaar dat ze er eenvoudig uit te filteren waren (ook in combinatie met de stemfrequentie: soms heel veel per uur, dan urenlang niks). Beetje a la de Braatolizer dus.

/edit: ik wilde nog wijzen op deze post van oh, when? van dec 2003:
[rml]oh,when? in "[ Flash/SSL] beveiliging."[/rml]

[ Voor 5% gewijzigd door Anders op 13-08-2004 02:49 ]

Ik spoor veilig of ik spoor niet.


Acties:
  • 0 Henk 'm!

Verwijderd

En even cynisch, als niemand toch nooit wat krijgt, of willekeurig is er ook geen probleem !

Acties:
  • 0 Henk 'm!

  • SysRq
  • Registratie: December 2001
  • Laatst online: 20-09 23:32
@Anders: Kun/Wil je misschien die proxylijst met ons delen?

-


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14

pietje63

RTFM

Verwijderd schreef op 13 augustus 2004 @ 11:32:
En even cynisch, als niemand toch nooit wat krijgt, of willekeurig is er ook geen probleem !
Ja, maar hij wil er kennelijk geld door verdienen.. Mensen betalen om het spel te spelen en vervolgens kunnen ze een prijs winnen. En de meeste mensen betalen niet om een simpel flash spel zonder hoofdprijs te spelen.

Alternatief: je eigen spel hacken en de hoofdprijs winnen :D.

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

Verwijderd

Zynth schreef op 13 augustus 2004 @ 00:35:
Verder gaat het hier inderdaad ook om duizenden bezoekers en prijzen van over de 1000 euro.
Had dat dan meteen gezegd ;)
Toch blijft een goede kosten/baten analyse in zo'n geval gerechtvaardigd. Laatst nog een goed boekje over gelezen, maar ik ben de naam even kwijt, die zoek ik nog op. Het betrof een stappenplan voor het opstellen van een degelijke risk/security assesment.

@Anders:
Goede posts, mag ik aannemen dat je wel een aantal goede linkjes of aanbevelingen qua boeken hebt met meer van deze info? En indd zou die proxylijst zeer welkom zijn als je begrijpt wat ik bedoel ;)

Acties:
  • 0 Henk 'm!

  • Anders
  • Registratie: December 2000
  • Laatst online: 13-09 18:52
De proxylist heb ik geupload naar http://www.paksoi.nl/out/tweakers/proxylist.zip

Het is een CSV bestand (zipped: 95 kB) met 17.231 proxy-adressen (sorry, geen 25.000 :) ) met de volgende kolommen:
  • ip-adres
  • bron
  • tijdstip van opslag (datetime)
Bronnen zijn o.a.

http://www.samair.ru/proxy/
http://www.proxy4free.com/index.html
http://www.stayinvisible.com/index.pl
http://www.aliveproxy.com/

Mocht het downloaden heel erg hard gaan dan zal ik 'm mogelijk (tijdelijk) offline halen of op mijn lokale servertje planten.




Wat betreft goede links en bronnen, dat viel me vies tegen. Vrijwel alles is uit eigen ervaring, uit brainwaves met collega's, aangevuld met een beetje GoT en natuurlijk Google Newsgroups. 30 e-books die ik heb doorgeplozen belichten het security-aspect nauwelijks, en komen niet veel verder dan "pas op". De interessantste bronnen waren nog de pagina's, fora etc waar werd bediscussieerd hoe een en ander gehackt zou kunnen worden.

Ik spoor veilig of ik spoor niet.

Pagina: 1