Shared Secrets

Door Sgreehder op dinsdag 16 april 2013 15:59 - Reacties (1)
Categorie: Perpetuum, Views: 2.580

Zoals beschreven in een vorige blog, worden via mijn Perpetuum-client wat gegevens verzameld die worden doorgezet naar mijn website, zodat spelers niet hoeven te zijn ingelogd om te zien wat er zoal in het spel omgaat. Inmiddels heb ik deze informatie uitgebreid. Het gaat nu om:

• Conversaties in-game channels en IRC
• Notificaties in-game channels en IRC (dit bestaat met name uit inloggen/uitloggen)
• Intrusion events (dit zijn de tijden dat player-owned outposts kwetsbaar zijn geweest en wie aanspraak heeft gemaakt op een toekomstige overname)
• Wallet-transacties

Het mag duidelijk zijn dat ik nu kan volgen wie aan mij (in-game) geld stuurt. Ik wil dit doorzetten naar een systeem waarmee in-game geld kan worden overgezet naar de website, om 'premium'-diensten af te nemen (wat dit precies gaat inhouden moet ik nog vorm geven), maar ook om leukigheidjes (zoals een lotterij) makkelijker te kunnen realiseren.

Met dat soort faciliteiten begint het dus ook interessanter te worden om misbruik te maken van de website. Het systeem wat ik gebruik om de gegevens door te zetten is momenteel gebaseerd op een POST request via cURL. Een IP-check lijkt mij in elk geval niet betrouwbaar genoeg om na te gaan of nieuwe data daadwerkelijk van mijn computer afkomt. Een mogelijkheid is HTTP basic access authentication, maar ik gebruik momenteel shared-hosting waarbij SSL niet mogelijk is, dus waterdicht is het dan zeker niet. Er is gelukkig een goed alternatief: keyed-hash message authentication code, of HMAC.

HMAC functioneert op basis van een hash-algoritme (zoals SHA512), waarmee de te sturen data in combinatie met een 'shared secret' (een sleutel) kan worden gehashed naar een MAC (message authentication code). De server ontvangt daarop de data met aantekening (signature), en vergelijkt de MAC op basis van de gedeelde sleutel. Als deze hetzelfde is, wordt de data goedgekeurd voor verwerking.

Het versturen van de data:


code:
1
2
3
4
5
$data = serialize($transfers);
$hmac = hash_hmac('sha512', $data, $sharedSecret);

curl_setopt($ch, CURLOPT_URL, $transfersUpdateURL . '&sign=' . urlencode($hmac));
curl_setopt($ch, CURLOPT_POSTFIELDS, ('transfers=' . urlencode($data)));



En het controleren van de afkomst aan de andere kant:


code:
1
2
3
4
5
$signature = isset($_GET['sign']) ? $_GET['sign'] : '';
$hmac = hash_hmac('sha512', $_POST['transfers'], $config['shared-secret']);
if ($hmac !== $signature) { 
    exit;
}



De voornaamste kwetsbaarheid tegen HMAC is een brute-force aanval (met de lengte van de keys al een aardige opgave op zichzelf), maar dit kan eventueel eenvoudig worden opgelost met een SSL-verbinding.

Livestream 'coding jam'

Door Sgreehder op zondag 14 april 2013 14:38 - Reageren is niet meer mogelijk
Categorie: Perpetuum, Views: 1.829

Vandaag (de zon laat zich nog niet zien) ga ik mij bezig houden met het ontwikkelen van extra functionaliteit voor mijn 'third-party' website die is gebouwd rond het spel Perpetuum. Ik vind het zelf altijd interessant om livestreams te zien van coding jams e.d., dus waarom het niet zelf doen?

Het is de bedoeling naar het volgende toe te werken:
• agents verifieren via een in-game channel, zodat de site zeker weet dat een bepaald account op de site ook correspondeert met een in-game account gelukt!
• commentaar op het killboard
• de mogelijkheid in-game geld te sturen naar de site, hoofdzakelijk om onzinnig commentaar op het killboard te elimineren (alleen directe betrokkenen kunnen 'gratis' commentaar leveren)

De stream:

http://www.twitch.tv/sequer_doek

De website:

http://sequer.nl/

Het spel:

http://perpetuum-online.com/

Logs theft met PHP/MySQL

Door Sgreehder op vrijdag 5 april 2013 16:45 - Reacties (2)
Categorie: Perpetuum, Views: 2.403

Voor Perpetuum, een sandbox-MMOG, heb ik een stapel scripts ontwikkeld om berichten van in-game chatkanalen te pushen (dmv. long polling) naar bezoekers op een website. Op deze website heb ik, naast deze tool, een selectie van hulpmiddelen voor dit spel geplaatst.

Allereerst even wat over Perpetuum. Op de oppervlakte is deze 'Hungarian-made' MMOG behoorlijk vergelijkbaar met EVE Online, met het duidelijk verschil dat het om 'robots op eilanden' gaat. Ook in Perpetuum is het een kwestie van een paar korte tutorials afwerken, en daarna mag je het zelf allemaal bekijken. Robots zijn modulair opgebouwd, en ook de overview op de UI is vertegenwoordigd. Zoals in EVE is de markt grotendeels gevuld met producten van andere spelers, maar de lage populatie (ik vermoed zelf rond de 500-600 actieve spelers) en producenten die alleen actief zijn binnen corporaties/coalities zorgen voor een wat karig aanbod.

De verschillen zijn ook opvallend; het approach/orbit-patroon is vervangen door een WSAD-patroon, skills (hier: extensions) kunnen selectief worden opgewaardeerd (achteraf vergelijkbaar met Dust, grappig genoeg), en PVP is snel en heeft opvallende kenmerken (zo kan dicht op elkaar vechten tot gevolg hebben dat sensoren flink worden verstoord en een ontploffing kan een kettingreactie veroorzaken die een hele groep kan vernietigen).

Goed, de Perpetuum-client kan dus een log bijhouden van open chatkanalen. Daarnaast zijn de Perpetuum-servers zo goed als 24/7 online (geen downtime, behalve voor patches), en de client duldt langere periodes van inactiviteit van de spelers. De berichten worden direct bijgeschreven in een bestand (per kanaal), dus het was voor mij zaak te beginnen met een tail -f implementatie voor Windows, die nieuwe berichten kan doorsturen (met behulp van een POST request bijvoorbeeld) naar de website. Hoewel het mogelijk kan met een wat losse applicaties en een pipe in PowerShell, leek het me toch handiger dit met een PHP CLI-applicatie te doen. Deze kan dan in een loop werken en om de paar seconden de bestanden pollen voor veranderingen, en gelijk wat PCRE en Purificatie toepassen.

De code van een tail implementatie in PHP (van dit voorbeeld):


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function tail($filename, $lines = 10, $buffer = 4096) {
        
    $f = fopen($filename, "rb");
    fseek($f, -1, SEEK_END);
    if(fread($f, 1) != "\n") $lines -= 1;
    
    $output = '';
    $chunk = '';
        
    while(ftell($f) > 0 && $lines >= 0) {
        $seek = min(ftell($f), $buffer);
        fseek($f, -$seek, SEEK_CUR);
        $output = ($chunk = fread($f, $seek)).$output;
        fseek($f, -mb_strlen($chunk, '8bit'), SEEK_CUR);
        $lines -= substr_count($chunk, "\n");
    }
    
    while($lines++ < 0) {
        $output = substr($output, strpos($output, "\n") + 1);
    }
        
    fclose($f);
    return $output;
}



Het CLI-script stuurt in het geval van nieuwe berichten een POST-request naar de webserver, die deze in een database opslaat en de laatste 15 berichten per kanaal wegschrijft naar een filesystem.

Op de website zelf wordt javascript geserveerd met herhalende asynchronous requests (met een lange time-out) naar een long polling script, vergezeld met een 'since' parameter. Mochten er dus nieuwe berichten zijn, dan kunnen deze direct worden doorgezet, anders blijft het script om de paar seconden het filesystem op wijzigingen pollen. Dit script draait voor maximaal 30 seconden (vandaar 'long polling'), waarna de browser simpelweg een nieuwe request verstuurt.

Het resultaat:

http://sequer.nl/?a=chat-default

Mobiele providers een hak zetten

Door Sgreehder op vrijdag 13 mei 2011 22:15 - Reacties (19)
Categorie: Overig, Views: 5.855

Een kleine deviatie van het reguliere onderwerp van deze blog; dit moest ik gewoon even kwijt.

Daar de kans groot is dat alle providers een vorm van DPI (al dan niet SPI) gebruiken om het verkeer op mobiele datanetwerken te 'besnuffelen', vond ik het tijd om eens verder te kijken naar mogelijke maatregelen. Dit heeft weinig met mijn aluminium hoedje te maken (die overigens mooi glimt), maar DPI kan naar mijn mening niet effectief zijn zonder machine learning (afhankelijk van je semantieke overtuiging kan je het net zo goed data-mining noemen), en voor machine learning geldt dat deze moet worden getraind door mensen. Dit proces vereist dat daadwerkelijke data moet worden ingekeken, dus het is niet de vraag ůf je gegevens worden ingekeken. Ik ga er tenminste niet vanuit dat een ethisch wetenschappelijk proces is gevolgd waarbij de te trainen datasets met de hand op basis van bijvoorbeeld enquetes en interviews zijn vervaardigd.

Afijn, oplossingen. Arnoud Wokke noemde zoiets als het opzetten van een VPN SSL c.q. VPS tunnel via het buitenland. Dit lijkt me prijzig en onnodig gecompliceerd. We vertrouwen liever dat onze vrienden van bijvoorbeeld XS4all (vervang hier door wat aan fatsoenlijke providers over is) een beetje vies zijn van DPI, en laten het gewoon via de internetverbinding thuis lopen.

In de basis gebruiken we dus een smartphone om contact te maken met een computer op het thuisnetwerk via een VPN-verbinding, welke vervolgens aan de router doorgeeft een IP adres toe te kennen, waardoor de smartphone via de VPN verbinding internet 'uit de muur' kan gebruiken. Ik meen dat dit redelijk platform-onafhankelijk moet kunnen gebeuren, ongeacht VPN server, router of smartphone. Ondersteuning voor VPN is zeker een voorwaarde. Voor mijn voorbeeld hieronder heb ik een Windows 7 desktop, een Linksys modem-router, en een iPhone gebruikt.

VPN server

Goed, de VPN server op het thuisnetwerk moet een inkomende VPN verbinding kunnen faciliteren. Met Windows 7 (en ik denk dat dit met Vista ook zo ongeveer gaat) gaat men naar Control Panel > Network and Internet > Network Connection, en drukt vervolgens op alt (standaard heeft Microsoft tegenwoordig in dit soort schermpjes de menubalk verborgen). Kies dan File > New Incoming Connection... In de wizard die volgt moeten accounts worden gekozen (zorg er in vredesnaam voor dat er een wachtwoord op de accounts zit), en let er ook even op dat 'Through the Internet' staat aangevinkt. Een nieuw item verschijnt (Incoming Connections), waarna even dubbelklikken en naar het tabje Networking moet worden gegaan. Nog even dubbelklikken op Internet Protocol Version 4 (TCP/IPv4) (of het IPv6 item if that floats your boat) en even controleren of de optie 'Allow callers to access my local area network' is aangevinkt. Wat visueel materiaal ter ondersteuning:

http://tweakers.net/ext/f/Rmf1w5xzRFy9VP3KlDxgbGPT/medium.jpg

Je ziet dat ik hier een aparte range voor verbindingen via de VPN aangeef, dit is wel overzichtelijk als je redelijk wat rotzooi aan het thuisnetwerk hebt hangen.

Router

Met betrekking tot de router is het belangrijk om:

- de juiste poort (1723 via TCP) forwarden naar het juiste netwerkadres (van de computer waar het ontvangen van een VPN verbinding is ingesteld)

- de router zelf in te stellen op het gebruik van, in dit geval, PPTP-passthrough; dit is gewoon een keuze tussen aan of uit.

Het forwarden van de poort is te doen in de instellingen van de router, vaak te bereiken via de browser, of in sommige gevallen met een speciale applicatie. Het adres van de router is te vinden door in de status van de internetverbinding te zoeken naar een term als 'standard gateway'. Veelgebruikte addressen zijn 192.168.1.1 (of *.*.2.1) en 10.0.0.1.

Beide instellingen zijn wellicht even zoeken. Bedenk ook dat als de router met IP addressen werkt als het om port forwarding gaat, het misschien zinvol is om het IP adres van een machine handmatig in te stellen, zodat het adres niet plots verandert.

Wederom wat visueel materiaal:

http://tweakers.net/ext/f/h6ZKlpvBeVsemDWVyOiexShz/medium.jpg

Smartphone

Dit is redelijk eenvoudig. Bij een iPhone is het Settings > General > Network > VPN > Add VPN Configuration...; het zal bij een vergelijkbaar OS zoiets dergelijks zijn. Vul je publieke IP in (Google maar even naar 'what's my IP' via je computer). Verder heb je natuurlijk het juiste VPN protocol (PPTP) en je gebruikersnaam en wachtwoord. Het resultaat:

http://tweakers.net/ext/f/6bMtAuE7WmvCUdFN1W27fabH/medium.png

Voila. Letterlijk tot aan je voordeur is er geen mobiele provider die enig idee heeft wat je uitspookt via het mobiele netwerk. Naast de inhoud van pakketjes, zijn ook headers en bestemmingen niet in te zien; immers, de gehele verbinding is versleuteld.

Het enige nadeel is in mijn geval is dat de verbinding niet geheel automatisch op een VPN verbinding overgaat als de telefoon bijvoorbeeld uit stand-by komt. Met de iPhone is het bijvoorbeeld noodzakelijk om in het eerste schermpje van de instellingen een knop om te schuiven, wellicht dat dit op sommige besturingssystemen anders functioneert.

Incursion

Door Sgreehder op woensdag 1 december 2010 00:45 - Reacties (6)
Categorie: EVE Online, Views: 3.832

In sterk contrast staat de release van deze expansion voor EVE Online tot de vorige. In slechts 3,5 uur was het gebeurd. Het mag dan trouwens een expansion heten, het is meer een update. Toch zijn er wat leuke toevoegingen en het plan is om alle onderdelen die volgens de planning deel uitmaken van de expansion, de komende maanden toe te voegen.

Incursion 2


De precieze achtergrond laat ik even achterwege, maar laten we stellen dat uitbater CCP, die toch altijd redelijk goed op de community lijkt in te kunnen spelen, afgelopen jaar een ware 'shitstorm' over zich heen kreeg. Aanleiding leek vooral de lag, die belachelijke vormen begon aan te nemen, maar zo is er wel meer. Een en ander rammelt inmiddels aan EVE Online, en mijn indruk was vooral dat met allerlei 'shinies' (met name dus nieuwe features) de aandacht moest worden afgeleid.

Goed, CCP staat niet voor niets voor Crowd Control Productions, en dusverre is de expansion dus gefaseerd om 'kwaliteit te waarborgen'. Opvallend vond ik dat vooral wat oude 'bijtertjes' zijn opgelost;

- navy/pirate faction scheepjes op de markt zelf, dus niet meer enkel beschikbaar via contracts (de nieuwe indeling kan ook geen kwaad voor het overzicht);
- labeltjes op faction scheepjes en modules, zoals ook bij tech II en tech III items het geval is;
- 'rubber banding' opgelost; dit is een hele oude glitch, waarbij met het uit warp komen alle zaken op het scherm een paar keer opnieuw van afstand veranderen;
- een aanzetten van een tractor beam op een item zorgt nu niet meer dat deze alle kanten opspringt voordat het wordt aangetrokken;
- probes op je overview kunnen zetten (en dus specifiek kunnen filteren op de directional scanner);
- de context menuutjes zijn logischer ingedeeld, dus 'trash' verschijnt nu meestal onderaan (iedereen die ooit bezopen EVE heeft gespeeld weet hoe vervelend de oude situatie kon zijn);
- kunnen aanzetten van anti-aliasing (eindelijk).

Voor de volledige lijst verwijs ik je naar de patch notes.

Goed, dan hebben we ook nog een aantal voordelige wijzigingen aan Tech II ammo, met name het spul voor dichterbij, is het voorkomen van lag verder ingeperkt, en hebben we een nieuw schip erbij, de Noctis. Deze Industrial uit de keuken van ORE vervangt de typische rol van salvager normaal weggelegd voor destroyers en ook nog wel bijvoorbeeld Hurricane's. 8 high slots en een tractor beam range van zo'n 80 kilometer met optimale training (de nieuwe ORE industrial skill tot level 5) is natuurlijk de moeite.

Incursion 1


Ik was er zelf, nadat de server weer online was gekomen, er vroeg bij in 4C- voor een Noctis BPO (een oneindige blueprint), en na enkele uren de markt gemolestreerd te hebben heb ik mijn kosten er al uit, maar dat terzijde.

Want Incursion heet de nieuwe expansion. Wat houdt dit in? Wel, op elk willekeurig moment kan een complete constellation, een groep systemen, in high- low- of nullsec worden overgenomen door Sansha's Nation (jeweetwel, vreemde schepen met scherpe punten en lasers). Op dat moment zullen in al deze systemen tevens cynojammers actief worden, hebben je tank en wapens minder effect, en mocht je NPC bounties ontvangen, dan worden deze gehalveerd. Je zal dan tevens een drietal verschillende soorten sites kunnen gaan doen in deze systemen, welke elk een minimaal aantal spelers vereisen (van 5 tot 40 man). Iedereen heeft hier toegang toe, en het is flink scoren mocht je een site kunnen afmaken (met daarbij een element van competitie en participatie, want alleen de meest effectieve fleet wordt beloont). Tevens dring je daarmee de huidige incusion zelf een stukje terug.

Tel daarbij op dat de eerder gebruikte Sleeper AI zijn rentree maakt, met wat interessante wijzigingen (nog wat meer naar reŽeler PVP, met logistics, spider tanks, etc.), en deze ogenschijnlijk op PVE georienteerde uitbreiding begint wat scherpe randjes te krijgen. Ik had al verteld dat dit ook zomaar in highsec kan gaan voorkomen?

Goed, dan is er later in januari ook nog een leuke bonus in de vorm van een vernieuwe portrait creator, waarbij iedereen zijn lelijke tronie kan vernieuwen met de graphics die ook gebruikt zullen worden in Incarna (welke uitkomt in de zomer van 2011, schijnbaar), en met de kerst komt er ook nog een leuk (onbekend) cadeautje, nog naast het feit dat op 14 december de 'learning skills' worden opgeheven en je deze skillpoints mag herverdelen over de rest van je ontwikkeling, met verder een +5/+5/+5/+5/+4 attribute boost (om te compenseren voor het verlies van de boost die learning had kunnen geven). Alles tezamen genomen lijkt dit alles een stuk imposanter dan zowel Dominion als Tyrannis, de voorgaande expansions, dus blijkbaar heeft CCP de boodschap voor de komende tijd weer begrepen.

Ingewikkeld? Hier nog wat verder leesmateriaal: