This is an old revision of the document!
Forced Update Revisions 9-28-2018
Revision 1
Desktop
Add Export - Sitework 3D compatible file function instead of using IP Grid Compatible
Check for Update to be run on program start - also user command on Help - Check for Updates
Requires checking with server for version
Download of server provided link
Closing of the program, checkin of the key, and running of provided installer
Updated fingerprinter provided (MA)
Remove Mac Address from use
Does the following link reference also generate a unique ID
Unique ID? We no longer need to support Windows XP. Vista is a question but not a big one. Or is this also Machine ID ( I don't think so).
-
-
Decrease weight of userlogin for addition but cause negative points for difference (does it nuke now?)
Up weight of machine name and cause negative points for different machine name
Lower BIOS version weight and remove memory points if bios version changes
Verify
OS version code because of visible differences (not sure of check method. Windows class
Here) Question of whether the current version handles 32 bit correctly
Here and
Here
Detect checked out keys on install and prompt/or do checkin before install. Clean Bin files.
Remove the ability to run more than one session
Fix Bug #810 where existing process with stale key causes key lockup when new process with new key is started
Move and obfuscate bin files from c:\AGTEK to a more user specific location
Adding a randomized non-ui thread time check to the software independent of the mode switching.This requires a different server call when internet connectivity exists that checks the key status uniquely and provides the server with the next random time value. Rechecks before expected will be flagged and logged for future reports
Perform routine maintenance of bin files to prevent stale values from long past checkouts from causing fingerprint mismatches.
Store passwords only as tokens instead of encrypted text. This is a security problem bigger than us.
Server
Task list, including FingerPrinter: LicenseKey refactor tasks 2018
Server planning for rejection of of designated older versions. Faculty to designate said versions and tracking
Setting up limited Company with limited user access to files for all versions. Currently we store under Current Versions of the AGTEK Corporate Company (MC)
Creation of a Web Update page to be used for this campaign with clear messaging and direct links to versions both 64 bit and 32 bit. Not behind Firewall but set to not web index or link directly to the site.(MC)
Creation of a check key status (verify? name?) for use by the desktop code to verify the current key status at a random range and generate back to desktop when the next check time will be. This is distinguished from other calls in order to log possible dual use of keys. Server will at this time just log situations where the same key number is checking in too early. The absence of a checkin would not constitute a log situation necessarily as the user could have closed the program but retained the key. Make the bounds configurable from the server.
Add support for messaging with links, basic html.
Add support for specific to the user messaging. In the future the baked in ability for the server to respond with a message to a specific user based upon something they've done or not done (update your version for example).
Add total checkouts for report period to reset report to give problem context.
Designate Programs and Version
Check Web and mobile for compatibility.
Versions that will be updated
Program | New Version | Version Cutoff (still works) |
Earthwork 4D | 1.20.2 | 1.20.2 |
Materials 4D | 1.14.6 | 1.14.6 |
Gradework 4D | 1.02.3 | 1.02.3 |
Trackwork 4D | 2.15.3 | 2.15.3 |
Protect32 | None | Kill all |
| | |
Think no but still asking for clarity |
GradeModel | 1.79.2 | 1.79.2 |
Material 3D | 1.67.2 | 1.67.2 |
Will ask again for clarity on GradeModel and Materials 3D. At this point I'm saying no.
The New Version column may be redundant since it pretty much matches the cutoff version
Cutoff date at this point is set for November 13th.
Revision 2
Adjustments based on Revision 1 experience
Tells and other information based on Citrix experience
Process limiting?
Monitoring of older versions being used and later rejected.
Timeline
Version - soft release web & new versions
Registered Letter - 9th
Email - October 22nd
Message
Server version Monitoring for older versions - method of reporting/notifications
Cutoff
Messaging
Total Revision List
Proposed Steps/Features of Key Revision ( Sitework, Materials, Trackwork, any others?)
Dispersion and obfuscation of bin files users to user-specific location and/or multiple locations to make it more difficult to duplicate easily through backup or other means. (There is no legitimate reason for a user to copy these)
Application Update reminder and messaging system (Application and server pieces tbd)
Improvements to key check-in and verification
-
Fingerprinter refinement (removing, adding, weights, behaviour)
Tracking program active vs key retained
Limiting Sessions to one and behavior when detected
Limiting number of processes (# allowed)
Server Settings to reject versions older than ### of Desktop software. Implementation and user Messaging
Dispersion, Obfuscation, and Cleanup of Bin Files
The current versions store their files in \AGTEK along with other individualized AGTEK data like Materials and Structure lists. This is asking for an inadvertent or purposeful backup of bin files with checked out keys that will cause problems.
We apparently also don't do any cleaning of Bin files which have slots for multiple key opens and old stale settings may persist.
Application Updater built in to software
With few exception (Hasp), 4D key users are all required to have technical support and should have access to software updates. The android software (non play store) has the ability for us to push an update and notify the user. It's not possible to force the install but yo can remind them whenever the software starts.
My guess is we can use part of the server system for that side of the process. On the desktop side we'd have to create the method, be able to run it separately from the desktop code so that code can be shut down for updating.
Messaging
We have some messaging built into the server now. It was primarily designed to announce Server maintenance. A suggestion is to add more capability like links.
Key checking and Verification
We currently mainly check at startup and mode start. This is a legacy of hardware keys, single processes, and non-internet connected computers. We don't intend to disallow non-connected computers but most are connected. We need to check more often just a mode switch and should introduce a timed check of connection and then check of the key. This should not be on the UI thread as to not cause interruption to work and it can't be so often as to cause server loading issues. A possible other use for this is if we use a timed connection then it might be a tell of more than one key usage on different machines. If a test checked every 22 minutes and then a machine checked in five minutes later then that could be an indication of two separate machines. This checkin would need to be distinguishable from a normal checkin/checkout(Something we monitor only at first).
We also need to connect and leave a marker when the user exits software but retains the key.
Fingerprinter refinement
Some of the anomalies showing up with logging show a need to refine the fingerprinter. These refinements include review of the weighting, removing some items like Mac Addresses and counts, looking for other markers, and checking the quality of the values we're seeing
Potential methods to identify key scofflaws
Use set key timer checks (connected) to verify whether more than one key is in use and notify us of that case.
?Use computer name in key checks with server?
Fix Log issues on Fingerprinter
Register when the software is checking in a key for a fingerprinter violation
Set time checks to identify usage more often the
Keeping Key message - Exit from software.
Require that the computer get a machine ID to run
Version requires key to be checked in before install (no support of existing BIN files)
2018-09-19
This note describes reccomendations for changes to the management of LicenseKeys on desktop (Windows) applications.
Issues we've seen:
False finger print failures due to mismatch of component values
High variability of MacAddresses
Unreliability MacAddresses (can be created from “whole cloth”, duplicates from VMs, etc)
Uniformity of CPUs in modern systems
Users running with keys from other machines
Seemingly random local resets due to other errors
Goals:
Reccomendations:
Produce an unambiguous written document stating the behavior of LicenseKeys
Remove MacAddress state variables from finger printer
Remove Multiple CPU state variables from fingerprinter (ie: Intel(R) Core(TM) i7-6600U CPU @)
Move stored file from C:\Agtek (or user specified directory) to a known machine specific location
Encrypt stored key files with CPU unique key (e.. Machine_ID) [this is a minimal recommendation]
Encrypt stored key files with CPU & user specific key [this is more recommended than last]
Examine Windows for other unique state variables that can be added
Run Mike A's multi machine finger print tester process after implementing the above.
Implications:
With fewer state variables to fingerprint, the printer is more susceptible to false positives.
Using machine unique (or better machine+user) encryption keys, the finger printer will not present false positives
What happens if for some reason Machine ID is not present (Does Vista support it, New
OS, different scheme) Does the fingerprinter limp along if not present? Machine ID appears to be a Microsoft generated value/dependency
2018-09-19 Weights
Value | Weight | Example | Notes |
CPU Count | 5 | 2 | Not currently used |
Machine ID | 5 | {710EB72B-488C-4F7E-ADBD-1E73122BC945} | Should use HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography, or both |
CPU description | 2 | Intel(R) Core(TM) i7-6600U CPU @ 2.60GHz | Not currently used (will add compare for first core) |
MAC Addr Count | 4 | 5 | Not reliable |
MAC Address | 5 | {9A427519-B1A2-45B9-B6DF-0392C6724526}:48:ba:4e:ea:84:a7:0:0 | Not reliable |
BIOS Version | 5 | 05/02/2018 | Bios dates are changing. Both Dell and HP have automatic BIOS updates possible |
OS Version | 4 | Windows 10 Enterprise | We're seeing variations, need to check reliability of check |
Memory size | 3 | 17053204480 | Bios changes may affect available memory number from being exact |
Computer Name | 5 | John's laptop | |
User ID | 9 | user@example.com | |
Notes about compare:
Failure of MachineID to compare will always cause a key failure.
Licenses compare the saved (old) FP with a “current” FP
Required sum must be >= 20
Currently two CPU descriptions and two MAC addresses are used.
Might consider adding hard drive serial, it's not there now.
Motherboard serial is not used, as it's not reliable (not all boards have them, or are manufacturer specific). For instance Dell refers to them as service tags, HP does something different.
Characterizing fingerprint values - Specific vs Unique Values
Part of the weighting strategy has to take into account the characteristics of values being compared.
New Weights October 2018
Value | Weight | Ratio | Negative Weight | Negative Ratio |
Machine ID | 8 | .21 | -20 | -.52 |
Computer Name | 8 | .21 | -8 | -.21 |
OS Install Key | 8 | .21 | | |
Hard Drive Serial 1 | 4 | .10 | | |
CPU Description | 2 | .05 | -5 | -.13 |
OS Name | 2 | .05 | | |
CPU Core Count | 2 | .05 | | |
Memory Size | 2 | .05 | | |
BIOS Date | 2 | .05 | | |
Total Possible | 38 | | | |
Passing Value | 22 | | | |